Я пишу сценарий удара для автоматизации нескольких действий:
#!/bin/bash
echo "Hello, World"
NAME="${1}"
PATH="${2}"
echo $NAME
echo $PATH
eval "ls"
Я собираюсь звонить ls, ffmpeg
и много других команд.
Однако запущение моего скрипта дает мне следующую ошибку:
/var/www/html# ./life.sh test midhand.mp4
+ ./life.sh test midhand.mp4
Hello, World
test
midhand.mp4
./life.sh: line 9: ls: command not found
Каким образом? почему не найденный? Возможно, я должен импортировать каталог со сценариями?
Переменная PATH
специальная переменная оболочки. Это определяет список каталогов, в которых могут быть найдены исполняемые файлы/команды.
В строке PATH="${2}"
, Вы уничтожаете значение по умолчанию PATH
и теперь оболочка не знает, где найти ls
команда. Например, ls
может быть найден в каталоге /bin
, но Вы изменили PATH
иметь значение midhand.mp4
(второй аргумент), в особенности PATH
не содержит /bin
и таким образом Ваша оболочка не может найти ls
команда.
Попробуйте это:
#!/bin/bash
echo "Hello, World"
the_name="${1}"
the_path="${2}"
echo "PATH is '$PATH'"
echo $the_name
echo $the_path
eval "ls"
Примечание. Можно изменить последнюю строку от eval "ls"
только к ls
.
Можно работать man bash
получить дополнительную информацию.
Вы получаете это сообщение об ошибке, потому что Вы изменились PATH
переменная среды к параметру командной строки (${2}
), какая доза не содержат фактический двоичный файл.