mv : не найдено при запуске из скрипта, который изменяет переменную PATH

mv : не найдено при запуске из скрипта, который изменяет переменную PATH

У меня это есть в моем скрипте. Но возвращает ошибку. Если я выполняю команду в консоли, работает нормально

./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резервирует пространство имен переменных с заглавными буквами дляпеременные среды(т.е. экспортированные переменные оболочки), используемые оболочкой и набором стандартных утилит. Насколько мне известно, это не такзапретитьиспользование заглавных букв внеэкспортированные переменные оболочки, но вся цель определения пространств имен — избежать конфликтов. Поскольку для скрипта переменные окружения и переменные оболочки имеют одинаковую семантику, лучше вообще избегать переменных в верхнем регистре.

Связанный контент