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

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

0
задан 18 December 2017 в 00:46

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 - успех, положительный - ошибка, отрицательный - нет ошибки, но нужно предпринять специальные действия

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

1
ответ дан 18 December 2017 в 00:46

Состояние выхода скрипта - это состояние выхода последней команды, которая была выполнена. Например, если последний оператор пытается создать каталог с 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.

3
ответ дан 18 December 2017 в 00:46

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

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