
У меня это есть в моем скрипте. Но возвращает ошибку. Если я выполняю команду в консоли, работает нормально
./script.sh[16]: mv: not found [No such file or directory]
Я хочу переместить некоторые файлы, начинающиеся с T353, из одной папки в другую.УДАЛЕННЫЙ_ПУТЬэто /tmp/ иПУТЬмой рабочий каталог
cd $REMOTE_PATH
mv T353* $PATH #this is the line 16
Если я make mv /tmp/T353* .
работаю хорошо.
решение1
Похоже, вы используете переменную PATH
в своем скрипте. Это переменная, которую оболочка использует для поиска исполняемых файлов. Это означает, что если вы измените ее на что-то другое, что не является :
списком путей с разделителями-символами, или на путь, который не содержит исполняемых файлов, используемых скриптом, оболочка может больше не находить такие вещи, как mv
или другие стандартные утилиты.
По этой причине предпочтительнее использовать строчные буквы в переменных сценария оболочки (это дело вкуса 1 ) или, по крайней мере, знать, что существуют переменные, которые оболочка использует для различных целей, и что вам следует избегать их изменения, если, конечно, вы не хотите изменить поведение оболочки.
Переменные, используемые Bash, перечислены в разделе «Переменные оболочки» руководства Bash.
Кстати, cd
на строке вышеделаетработа. Это потому, что это специальная утилита, встроенная в саму оболочку. Таким образом, оболочке не нужно смотреть, $PATH
чтобы выяснить, где она находится.
Кстати, вы говорите, что $PATH
это ваш рабочий каталог. Оболочка уже хранит текущий рабочий каталог в $PWD
.
Кстати, возьмите за привычку заключать переменные в двойные кавычки. Смотрите "Последствия для безопасности, если забыть заключить переменную в кавычки в оболочках bash/POSIX".
1 Ну, в основном, но стандарт POSIXрезервирует пространство имен переменных с заглавными буквами дляпеременные среды(т.е. экспортированные переменные оболочки), используемые оболочкой и набором стандартных утилит. Насколько мне известно, это не такзапретитьиспользование заглавных букв внеэкспортированные переменные оболочки, но вся цель определения пространств имен — избежать конфликтов. Поскольку для скрипта переменные окружения и переменные оболочки имеют одинаковую семантику, лучше вообще избегать переменных в верхнем регистре.