Вам необходимо обновить переменную PATH. Вы можете сделать это в .bashrc:
PATH='/usr/sbin:/usr/local/sbin:/usr/bin:/usr/local/bin'
Обычно, когда вы запускаете программу, $ PATH - это то место, где она будет искать (путь - это список каталогов, разделенных знаком:). Если он не может найти его там, вы получите сообщение об ошибке - это ваш случай.
Я добавил наиболее популярные места, но вы могли устанавливать свои приложения в другие каталоги; в этом случае просто измените указанную мной строку соответствующим образом.
Вы сказали getopts
, что опция -d
должна принимать аргумент, а в командной строке вы используете -d -f myformat
, что явно (? )говорит: «-f
— это аргумент, который я привожу для варианта -d
».
Это ошибка не в коде, а в использовании скрипта в командной строке.
Ваш код должен проверять правильность аргументов опции -и правильность установки всех опций.
Возможно что-то вроде
while getopts "d:f:" opt; do
case $opt in
d) dir=$OPTARG ;;
f) format=$OPTARG ;;
*) echo 'error' >&2
exit 1
esac
done
# If -d is *required*
if [ ! -d "$dir" ]; then
echo 'Option -d missing or designates non-directory' >&2
exit 1
fi
# If -d is *optional*
if [ -n "$dir" ] && [ ! -d "$dir" ]; then
echo 'Option -d designates non-directory' >&2
exit 1
fi
Если параметр -d
является необязательным и если вы хотите использовать значение по умолчанию для переменной dir
в приведенном выше коде, вы должны начать с установки dir
на это значение по умолчанию. перед циклом while
.
Параметр командной строки не может одновременно принимать и не принимать аргумент.