Как вы устанавливаете статус выхода сценария оболочки?

Недавно мне было интересно, как вы меняете статус завершения или конечный статус скрипта в bash, Например; скажем, мы бежим test.sh и внутри программы она выходит используя exit 0... мне было интересно, что будет нормальной процедурой, чтобы изменить этот статус выхода, чтобы сказать 1? Я знаю, что вы могли бы использовать exit 1 но является ли это фактическим стандартом установки статуса выхода?

2 ответа

Решение

Ненулевой выход указывает на ошибку. Ноль указывает на успех. Попытка удалить файл, который не существует, хотя и является ошибкой, в большинстве случаев так же хороша, как и его удаление, поэтому ваш сценарий должен решить, следует ли считать такие вещи неудачными или успешными.

Так какие цифры вы должны использовать? За все мои 30 с лишним лет использования Unix я никогда не видел стандарта. Для ясности, если другие используют ваш сценарий, важно то, что вы либо используете только один код выхода для сбоя, либо определяете, что означает этот код выхода. Определение может быть включено многими способами. Одним из способов является вывод кода выхода вместе со списком возможных причин стандартной ошибки, как в

echo -e "Return code Error: " $Error "\n Possible errors are\n" \
"1 = missing parameter\n" \
"2 = Could not do what you wanted \n" >&2

Конечно, есть много альтернатив, таких как документирование ошибок в коде с комментариями (лучше всего указать это в сценарии, а не разбросанные по всему) или сделать необязательный параметр для сценария, как в

$myscript -error [other parameters if any]

который печатает все возможные ошибки.

Я использовал коды ошибок из сценариев, вызываемых другими сценариями, для возврата информации:

0 - успех, положительный - ошибка, отрицательный - нет ошибки, но необходимо предпринять специальные действия

Это не хорошо, если вызываемый скрипт запускается напрямую, так как это может запутать пользователя, но вызываемый скрипт может проверить это условие.

Состояние выхода скрипта - это состояние выхода последней команды, которая была выполнена. Например, если последний оператор пытается создать каталог с mkdir some/path, и команда не выполняется, то код выхода самого скрипта будет кодом выхода неудачного mkdir,

Если вы хотите установить другой код выхода, вы можете, используя exit встроенная:

exit: exit [n]
    Exit the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.

Если ваш скрипт обнаруживает, что что-то пошло не так, рекомендуется выйти с ненулевым кодом. Обычно используется 1, и это достаточно хорошо, пока вы не захотите подать другой сигнал вызывающим программам, чтобы иметь возможность по-разному реагировать на различные виды ошибок. Если у вас нет конкретной идеи, просто используйте exit 1,

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