Выполните стандартную команду в сценарии удара

Я пишу сценарий удара для автоматизации нескольких действий:

#!/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

Каким образом? почему не найденный? Возможно, я должен импортировать каталог со сценариями?

2
задан 17 November 2014 в 20:51

2 ответа

Переменная 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 получить дополнительную информацию.

8
ответ дан 6 October 2019 в 20:11

Вы получаете это сообщение об ошибке, потому что Вы изменились PATH переменная среды к параметру командной строки (${2}), какая доза не содержат фактический двоичный файл.

4
ответ дан 6 October 2019 в 20:11

Другие вопросы по тегам:

Похожие вопросы: