mv *.cache.{js,woff} sub_folder - funktioniert als Shell-Befehl, aber nicht innerhalb eines Makefiles

mv *.cache.{js,woff} sub_folder - funktioniert als Shell-Befehl, aber nicht innerhalb eines Makefiles

Nachdem ich etwas mit erstellt habe, makemöchte ich alle Dateien, die mit enden, in .cache.{js,woff}einen Unterordner verschieben.

(cd $(PFROOT)/PVWR2/gwt/pdfwebviewer/; \
mkdir -p cache_files; \
mv *.cache.{js,woff} sub_folder)

Das Problem ist, dass es beim Ausführen als Dateiname und nicht als etwas Dynamisches makeinterpretiert wird und es natürlich keine Datei mit dem expliziten Namen gibt . Wenn ich einfach zum Ordner navigiere und ihn mit dem obigen Befehl manuell von der Shell aus verschiebe, funktioniert es problemlos.*.cache.{js,woff}*.cache.{js,woff}

Ich verstehe, dass es mit Globbing zu tun hat, aber ich weiß nicht, wie ich das beheben kann.

Antwort1

{...}ist eine Bash-spezifische Syntax für die Klammererweiterung, verwendet aber /bin/shstandardmäßig anstelle von bash.

Aus info makeAbschnitt 5.3.2:

Das als Shell verwendete Programm wird aus der Variable entnommen SHELL. Wenn diese Variable in Ihrem Makefile nicht gesetzt ist, /bin/shwird das Programm als Shell verwendet.

Wenn Sie Bash zum Parsen von Shell-Konstrukten in Ihrem Makefile verwenden möchten, können Sie oben Folgendes hinzufügen:

SHELL := /bin/bash

verwandte Informationen