Я запутался в значении кода завершения в конце скрипта bash: я знаю, что код выхода 0 означает, что он успешно завершился, и что есть еще много кодов выхода (127, если я не ошибаюсь?)
Мой вопрос заключается в том, что, когда код завершения 0 отображается в конце скрипта, он принудительно устанавливает код выхода как 0, даже если скрипт не выполнен или имеет другое значение?
bash
shell-script
exit
exit-status
Разоренный
источник
источник
exit 0
, он завершится с кодом выхода 0 независимо от того, что происходит в сценарии.exit 0
, он завершится с кодом 0, только если была выполнена эта последняя инструкция. Единственное влияниеexit 0
в конце скрипта - вернуть 0 вместо статуса из предыдущей инструкции.Ответы:
Встроенная команда
exit
выходит из оболочки (из ссылки Bash ):Запуск до конца файла также завершается, возвращая код возврата последней команды, так что да, финал
exit 0
заставит скрипт завершиться с успешным состоянием независимо от состояния выхода предыдущих команд. (То есть, если сценарий дошел до финалаexit
.) В конце сценария вы также можете использоватьtrue
или:
для получения кода выхода, равного нулю.Конечно, чаще вы будете использовать
exit
изнутри,if
чтобы закончить сценарий в середине.Они должны вывести 1 (
$?
содержит код завершения, возвращенный предыдущей командой):Хотя это должно вывести 0:
Я не уверен, имеет ли
exit
смысл сценарий «сбой» при выполнении сценария , поскольку некоторые команды, запускаемые сценарием, вполне могут потерпеть неудачу, но сам сценарий может быть успешным. Это зависит от автора сценария, чтобы решить, что является успехом, а что нет.Кроме того, стандартный диапазон для кодов выхода - 0..255. Коды выше 127 используются оболочкой для обозначения процесса, завершенного сигналом, но они могут быть возвращены обычным способом.
wait
Системный вызов фактически возвращает более широкое значение, с остальными , содержащими битами состояния , установленных в операционной системе.источник
$?
значение 128 + signum. См. Код завершения по умолчанию, когда процесс завершается? для деталей.exit 0
вернет только 0, если выход выполнен. (это может выйти по другому маршруту).0 означает успех, положительные целые означают неудачу. Существует 255 различных кодов ошибок, но значения 126 и выше зарезервированы, чтобы указать, что программа не может запуститься (126 или 127) или была уничтожена сигналом (129 и выше). См. Код завершения по умолчанию, когда процесс завершается? и какие значения возврата / выхода я могу использовать в функциях / скриптах bash? за дополнительной информацией.
Состояние завершения сценария оболочки - это состояние завершения последней команды, выполненной сценарием. Так например
возвращает статус выхода
somecommand
, тогда каквозвращает 0 независимо от того, что
somecommand
вернул. Этот второй сценарий также может быть написанПомещение
exit 0
в конец скрипта не обязательно приводит к тому, что он возвращает 0. Это только возвращает 0, когда достигнут конец скрипта. Например, следующий скрипт всегда возвращает 3:Следующий скрипт также всегда возвращает код ошибки, в дополнение к отображению сообщения о синтаксической ошибке:
Следующий скрипт возвращает 1 или 0 в зависимости от первого аргумента:
Следующий скрипт возвращает статус
somecommand
, так какset -e
вызываетsomecommand
сбой скрипта в случае сбоя:источник