Linux. Определить в скрипте, что программа не найдена. И другие зарезервированные коды завершения.
Понадобилось мне перед запуском скрипта определить, имеется ли в пользовательской системе утилита, которая вызывается в скрипте, и если ее таки нет, сказать юзеру, мол, поставьте, вот ссылка на скачивание.
Оказывается в Linux есть стандартные (зарезервированные) коды завершения, а если программа не найдена, то bash автоматически выдает код завершения
127. Таким образом, задача сводится к тому, чтобы на код 127 правильно отреагировать.Можете проверить на этом скрипте:
#!/bin/bash
$1
EXITCODE=$?
if [ $EXITCODE -eq 127 ]; then
echo "Command not found!"
else
echo "Exit code: $EXITCODE"
fi/excode-test ls
excode-test pb01 pb02 test.mp3
Exit code: 0Команда существует и выполнена успешно.
./excode-test sagfhjsdgfhjgf
./excode-test: line 3: sagfhjsdgfhjgf: command not found
Command not found!Примечание: Переменная
$?, содержащая код завершения, будет переопределена любой следующей командой, потому можно взять за правило, сохранять значение $? в отдельную переменную, если где-то потом в скрипте понадобится проверка кода завершения.1 - разнообразные ошибки, используется как стандартный код ошибки в скриптах или программах2 - согласно документации к Bash - неверное использование встроенных команд, иногда программисты его перелпределяют.126 - вызываемая команда не может быть выполнена, возникает из-за проблем с правами доступа или когда вызван на исполнение неисполняемый файл127 - "команда не найдена"128 - неверный аргумент команды exit128+n - фатальная ошибка по сигналу "n"130 - завершение по Control-C255 - код завершения вне допустимого диапазона, но утилита dialog использует этот код, как завершение по ESC.Коды завершения, имеющие предопределенный смысл
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/02/04/linu