Толик Панков
hex_laden
............ .................. ................
Back February 5th, 2020 Forward
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 - неверный аргумент команды exit
128+n - фатальная ошибка по сигналу "n"
130 - завершение по Control-C
255 - код завершения вне допустимого диапазона, но утилита dialog использует этот код, как завершение по ESC.

Источник


Коды завершения, имеющие предопределенный смысл

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/02/04/linux-opredelit-v-skripte-chto-programma-ne-najdena-i-drugie-zarezervirovannye-kody-zaversheniya/

Tags: ,
Back February 5th, 2020 Forward