Bash не может запустить команду из скрипта: команда mkdir не найдена

У меня есть отдельные скрипты для задач в bash. Вот разбитый:

#!/bin/bash PATH=/home/name/ mkdir $PATH cd $PATH && echo "done." exit 0 

Сегодня он сломался, и в первый раз он просто не хотел запускать cd, но создал каталог. Второй раз он просто сказал: «Команда mkdir не найдена». Выполнение этих команд точно с помощью точки с запятой отлично работает. Что случилось?

PATH – это переменная среды. Это то, что ваша оболочка использует, чтобы найти команды, которые он будет запускать. Точнее, PATH среды PATH содержит список имен каталогов, разделенных двоеточиями, которые последовательно выполняются для исполняемого файла с именем, которое вы указываете при вводе команды. (Если, конечно, команда, которую вы вводите, это встроенная оболочка, псевдоним или функция.)

Когда вы устанавливаете PATH в своем скрипте, вы «маскируете» значение переменной среды с переменной оболочки с тем же именем.

Вывод из этого не использует все имена проб для регулярных переменных оболочки.

Поскольку вы не собираетесь использовать переменную окружения, просто используйте имя переменной в нижнем регистре.

Также см:

  • Существуют ли соглашения об именах для переменных в сценариях оболочки?

В bash PATH – это специальная переменная, которая сообщает bash где искать установленные программы. Если у вас нет двоичного mkdir в /home/name/ , он должен вывести mkdir: command not found после установки PATH . Используйте другое имя переменной, чтобы исправить эту проблему.