Что такое код возврата exit code linux

Глава 6. Завершение и код завершения

. эта часть Bourne shell покрыта мраком, тем не менее все пользуются ею.

Chet Ramey

Команда exit может использоваться для завершения работы сценария, точно так же как и в программах на языке C. Кроме того, она может возвращать некоторое значение, которое может быть проанализировано вызывающим процессом.

Каждая команда возвращает код завершения (иногда код завершения называют возвращаемым значением ). В случае успеха команда должна возвращать 0 , а в случае ошибки — ненулевое значение, которое, как правило, интерпретируется как код ошибки. Практически все команды и утилиты UNIX возвращают 0 в случае успешного завершения, но имеются и исключения из правил.

Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды. Команде exit можно явно указать код возврата, в виде: exit nnn , где nnn — это код возврата (число в диапазоне 0 — 255 ).

Когда работа сценария завершается командой exit без параметров, то код возврата сценария определяется кодом возврата последней исполненной командой.

Код возврата последней команды хранится в специальной переменной $?. После исполнения кода функции, переменная $? хранит код завершения последней команды, исполненной в функции. Таким способом в Bash передается «значение, возвращаемое» функцией. После завершения работы сценария, код возврата можно получить, обратившись из командной строки к переменной $?, т.е. это будет код возврата последней команды, исполненной в сценарии.

Пример 6-1. завершение / код завершения

Переменная $? особенно полезна, когда необходимо проверить результат исполнения команды (см. Пример 12-27 и Пример 12-13).

Символ !, может выступать как логическое «НЕ» для инверсии кода возврата.

Пример 6-2. Использование символа ! для логической инверсии кода возврата

В отдельных случаях коды возврата должны иметь предопределенные значения и не должны задаваться пользователем.

Источник

Команда exit в Bash и коды выхода

Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.

В этой статье мы рассмотрим встроенную команду exit Bash и статусы выхода выполненных команд.

Статус выхода

Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.

По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.

Специальная переменная $? возвращает статус выхода последней выполненной команды:

Команда date завершена успешно, код выхода равен нулю:

Если вы попытаетесь запустить ls в несуществующем каталоге, код выхода будет отличным от нуля:

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

При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:

В приведенном выше примере echo $? напечатает код выхода команды tee .

Команда exit

Команда exit закрывает оболочку со статусом N Он имеет следующий синтаксис:

Если N не задано, код состояния выхода — это код последней выполненной команды.

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

Примеры

Статус выхода команд может использоваться в условных командах, таких как if . В следующем примере grep завершит работу с нулем (что означает истину в сценариях оболочки), если «строка поиска» найдена в filename :

При запуске списка команд, разделенных && (И) или || (ИЛИ), статус выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена, только если cd вернет ноль:

Если сценарий завершается exit без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.

Использование только exit — это то же самое, что и exit $? или пропуская exit .

Вот пример, показывающий, как завершить сценарий, если он запущен пользователем без полномочий root:

Если вы запустите сценарий как root, код выхода будет нулевым. В противном случае скрипт выйдет со статусом 1 .

Выводы

Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Bash получить код завершения команды в Linux / Unix

Я новый пользователь системы Linux. Как мне получить код завершения команды?

Как получить код вывода или статус команды оболочки Linux или Unix и сохранить его в переменной оболочки?

Введение. Каждая команда оболочки Linux или Unix возвращает состояние, когда она завершается нормально или ненормально.

Например, если скрипт backup.sh не выполнен, и он возвращает код, который сообщает скрипту оболочки отправить электронное письмо админу.

Что такое код вывода в оболочке bash?

Каждая команда Linux или Unix, выполняемая скриптом оболочки или пользователем, имеет статус вывода.

Статус вывода – это целое число.

0 состояние выхода означает, что команда была успешной без каких-либо ошибок.

Ненулевое (1-255 значений) состояние выхода означает, что команда была неудачной.

Как узнать код вывода команды

Вам нужно использовать определенную переменную оболочки с именем $? чтобы получить статус вывода из ранее выполненной команды.

Выведем $? переменной используя команду echo или команду printf:

Из приведенных выше выводов ясно, что код вывода 0 означает, что команда date была успешной.

Кроме того, код вывода – 127 (не ноль), так как команда nonexistant не была успешной.

Bash как получить код завершения команды – Как использовать коды вывода в скриптах оболочки

Итак, как вы сохранить статус вывода команды в переменной оболочки?

Просто назначьте $? в переменную оболочки. Синтаксис:

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

Команда exit вызывает обычное завершение скриптов оболочки.

Вывод из оболочки со статусом N. Синтаксис:

Пример скрипта оболочки для получения кода завершения команды

Заключение

На этой странице показано, как использовать коды вывода в системах на основе Linux или Unix и как получить статус вывода / код команды.

Источник

Глава 6. Завершение и код завершения

. эта часть Bourne shell покрыта мраком, тем не менее все пользуются ею.

Chet Ramey

Команда exit может использоваться для завершения работы сценария, точно так же как и в программах на языке C. Кроме того, она может возвращать некоторое значение, которое может быть проанализировано вызывающим процессом.

Каждая команда возвращает код завершения (иногда код завершения называют возвращаемым значением ). В случае успеха команда должна возвращать 0, а в случае ошибки — ненулевое значение, которое, как правило, интерпретируется как код ошибки. Практически все команды и утилиты Unix возвращают 0 в случае успешного завершения, но имеются и исключения из правил.

Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды. Команде exit можно явно указать код возврата, в виде: exit nnn , где nnn — это код возврата (число в диапазоне 0 — 255).

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

Эквивалентный вариант — exit $? или можно вообще опустить команду exit.

Код возврата последней команды хранится в специальной переменной $? . После исполнения кода функции, переменная $? хранит код завершения последней команды, исполненной в функции. Таким способом в Bash передается «значение, возвращаемое» функцией. После завершения работы сценария, код возврата можно получить, обратившись из командной строки к переменной $? , т.е. это будет код возврата последней команды, исполненной в сценарии.

Пример 6-1. завершение / код завершения

Переменная $? особенно полезна, когда необходимо проверить результат исполнения команды (см. Пример 12-30 и Пример 12-16).

Символ !, может выступать как логическое «НЕ» для инверсии кода возврата.

Пример 6-2. Использование символа ! для логической инверсии кода возврата

В отдельных случаях коды возврата должны иметь предопределенные значения и не должны задаваться пользователем.

Источник

Код завершения программ. Несколько вопросов!

В Linux есть возможность проверить (в консоли), с каким кодом завершилась программа.

Обычно 0 (true) означает корректное завершение, а 1 (false) — с ошибками. Но прочитал, что это не обязательно всегда так. Типа это общепринятые обозначения в программировании, и их надо придерживаться, но коды могут быть разными. А зачем нужно что-то кроме 0 и 1? Какие еще состояния программы бывают, кроме «корректно завершилась» или «вышла с ошибками»? Можно ли тут в пример привести разные Windows-программы, которые иногда падают и вылезают ошибки вида «0x1234» что-то такое, или это не то? Не совсем понятно, о чем такие ошибки могут сказать пользователю.

Собственно, прочел, что и в баш-скрипте можно самому задать код завершения в нужном месте, например, так.

И потом проверить его с помощью echo $? (по крайне мере, первый вызов этой штуки после завершения скрипта точно сработает. потом будет почему-то всегда 0 показывать).

Но заметил такую штуку, что если записать определенную команду в if, и заставить выполнить какое-то действие по завершению команды.

То не всегда прокатывает, в отличии от голой консоли! Тут проблема в том, что походу (поправьте, если неправ) не все консольные программы в Linux возвращают true (0) или false (1) в качестве «последнего» вывода. не знаю как назвать короче. В общем есть команды, которые ничего не выводят на экран. У таких прокатывает фишка с получением кода возврата в конструкции if. А другие просто выкидывают вывод результатов выполнения в stdout, тогда через if непонятно как получить код возврата. Ведь оно возвращает ненужный результат выполнения вместо кода возврата.

И еще, как перевести на русский определение из мануала? Гугл какую-то нелепицу выдает.

($?) Expands to the exit status of the most recently executed foreground pipeline.

Источник

Читайте также:  Windows локальная сеть сервер linux
Оцените статью