Nachdem ich etwas mit erstellt habe, make
mö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 make
interpretiert 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/sh
standardmäßig anstelle von bash
.
Aus info make
Abschnitt 5.3.2:
Das als Shell verwendete Programm wird aus der Variable entnommen
SHELL
. Wenn diese Variable in Ihrem Makefile nicht gesetzt ist,/bin/sh
wird 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