anstatt meine eigene Frage zu bearbeiten; Ich dachte, ich würde es beantworten, also ist die Frage da, um darauf zu verweisen.
Ja, das Skript hat auch nicht funktioniert.
Das 'Arbeits'-Skript lautet wie folgt:
#!/bin/bash shopt -s nullglob for i in $1*-* do echo file is $i FILENAME=$(basename $i) echo filename is $FILENAME NEWNAME=$ echo newname is $NEWNAME rm "$1$NEWNAME" mv "$1$FILENAME" "$1$NEWNAME" done
so; Korrekturen:
$ 1 nach dem für.
Die Ersetzung im Dateinamen unterscheidet sich in #! / bin / sh und #! / bin / bash. Grundsätzlich funktioniert $ nicht in MY #! / bin / sh .... (Hinweis zu $ - die beiden Schrägstriche bedeuten 'JEDES xyz durch abc ersetzen, ein einzelnes bedeutet, dass das erste xyz mit abc neu definiert wird. Beachten Sie außerdem, dass ein Bindestrich mit einem Escape-Zeichen versehen werden kann, da er einen Bereichsindikator anzeigen kann.
Fügen Sie vor der for-Schleife 'shopt -s nullglob' hinzu. Andernfalls, wenn KEINE passenden Dateien vorhanden sind, erhalten Sie das Suchmuster als Datei.
tun Sie nur den Dateinamen, da der Pfad viele Verzeichnisse mit Bindestrich enthielt!
Verwendung von 'Umbenennen' - wurde vom Projektbetreuer nicht erlaubt :(.
Nun, um es in das Makefile zu legen.
Mein ursprüngliches Problem war, dass ich nicht an "Bash - unerwartetes Ende der Datei" vorbeikommen konnte. Ganz einfach - alles muss effektiv auf einer Linie sein. Endzeilen mit (Leerzeichen); (Leerzeichen) \, damit bash das ';' als Zeilenende-Marker und geben Sie mit '\' an, dass Sie alles auf derselben Zeile als Bash präsentieren möchten.
Verwendung von $. Ich habe an vielen Stellen gelesen, dass in Makefiles, wenn Sie $ verwenden, um durch bash zu gelangen, Sie zwei verwenden mussten (zB $$ FILENAME). Aber ich musste VIER ($$$$ FILENAME) verwenden. Ich kann an dieser Stelle nur davon ausgehen, dass die Makefiles in dem komplexen Buildroot-System von Lede / Openwrt in gewisser Weise Include-Includes von Includes sind und ich nur 4 durch Experimente gefunden habe. Ich habe dies in keiner der anderen beantworteten Fragen zu Loops in Makefiles gesehen :).
also das letzte Makefile-Snippet: (Beachten Sie das Shopt, damit es auch funktioniert, wenn keine Dateien gefunden werden).
shopt -s nullglob ; \ for filevar in $(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/*-* ; \ do \ echo file is $$$$filevar ; \ FILENAME=$$$$(basename $$$$filevar) ; \ echo filename is $$$$FILENAME ; \ NEWNAME=$$$$ ; \ echo newname is $$$$NEWNAME ; \ echo 'rm "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME"' ; \ echo 'mv "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$FILENAME" "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME"' ; \ rm "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME" ; \ mv "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$FILENAME" "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME" ; \ done ls $(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/
Ich hoffe, diese Info hilft jemandem.