вместо того, чтобы редактировать мой собственный вопрос; Я думал, что отвечу на это, поэтому вопрос есть, чтобы обратиться.
Да, скрипт тоже не работал ....
«рабочий» скрипт выглядит следующим образом:
#!/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
так; поправки:
1 доллар после.
подстановка в имени файла отличается в #! / bin / sh и #! / bin / bash - в основном $ не работает в MY #! / bin / sh .... (обратите внимание на $ - две косые черты означают «замените КАЖДЫЙ xyz на abc, один означает, что первый xyz будет заменен на abc. Также обратите внимание, что дефис МОЖЕТ быть экранирован, поскольку он может указывать индикатор диапазона).
добавьте 'shopt -s nullglob' перед циклом for, иначе, если НЕТ подходящих файлов, вы получите шаблон поиска в виде файла ....
делать смещение только на имя файла, так как путь содержит много дефисных каталогов!
использование 'переименовать' - не было разрешено сопровождающим проекта :(.
Теперь о том, чтобы поместить его в make-файл.
Моя первоначальная проблема заключалась в том, что я не смог пройти «bash - неожиданный конец файла». На самом деле все просто - все ДОЛЖНО быть эффективно в одной строке. конец строки с (пробел); (пробел) \, чтобы заставить bash использовать ';' в качестве маркера конца строки, и используйте '\', чтобы указать, что вы хотите, чтобы все, что было представлено, было в одной строке.
Использование $. Я читал во многих местах, что в make-файлах, если вы использовали $ для прохода через bash, то вам пришлось использовать два (то есть $$ FILENAME). Но мне пришлось использовать ЧЕТЫРЕ ($$$$ FILENAME). Все, что я могу предположить в этой точке, это то, что в сложной системе buildroot Lede / Openwrt, make-файлы каким-то образом включают в себя включения, включаются включения, и я нашел только 4 экспериментально. Я не видел этого ни в одном другом ответе на вопросы о циклах в make-файлах :).
итак, финальный фрагмент make-файла: (обратите внимание на снимок, чтобы он работал, даже если файлы не найдены)
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/
Я надеюсь, что эта информация поможет кому-то еще.