коды завершения команд linux
Bash получить код завершения команды в Linux / Unix
Я новый пользователь системы Linux. Как мне получить код завершения команды?
Как получить код вывода или статус команды оболочки Linux или Unix и сохранить его в переменной оболочки?
Введение. Каждая команда оболочки Linux или Unix возвращает состояние, когда она завершается нормально или ненормально.
Например, если скрипт backup.sh не выполнен, и он возвращает код, который сообщает скрипту оболочки отправить электронное письмо админу.
Что такое код вывода в оболочке bash?
Каждая команда Linux или Unix, выполняемая скриптом оболочки или пользователем, имеет статус вывода.
Статус вывода – это целое число.
0 состояние выхода означает, что команда была успешной без каких-либо ошибок.
Ненулевое (1-255 значений) состояние выхода означает, что команда была неудачной.
Как узнать код вывода команды
Из приведенных выше выводов ясно, что код вывода 0 означает, что команда date была успешной.
Кроме того, код вывода – 127 (не ноль), так как команда nonexistant не была успешной.
Bash как получить код завершения команды – Как использовать коды вывода в скриптах оболочки
Итак, как вы сохранить статус вывода команды в переменной оболочки?
Как мне установить код вывода для моих собственных скриптов оболочки?
Команда exit вызывает обычное завершение скриптов оболочки.
Вывод из оболочки со статусом N. Синтаксис:
Пример скрипта оболочки для получения кода завершения команды
Заключение
На этой странице показано, как использовать коды вывода в системах на основе Linux или Unix и как получить статус вывода / код команды.
Команда exit в Bash и коды выхода
Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.
В этой статье мы рассмотрим встроенную команду exit Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.
По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.
Команда date завершена успешно, код выхода равен нулю:
Если вы попытаетесь запустить ls в несуществующем каталоге, код выхода будет отличным от нуля:
Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.
При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:
Команда exit
Команда exit закрывает оболочку со статусом N Он имеет следующий синтаксис:
Если N не задано, код состояния выхода — это код последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit возвращается оболочке как код выхода.
Примеры
При запуске списка команд, разделенных && (И) или || (ИЛИ), статус выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена, только если cd вернет ноль:
Если сценарий завершается exit без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.
Вот пример, показывающий, как завершить сценарий, если он запущен пользователем без полномочий root:
Выводы
Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Команды Exit и коды выхода в Bash
В этой статье мы рассмотрим встроенную команду exit в Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код завершения, когда она завершается, либо успешно, либо безуспешно.
По соглашению код завершения, равный нулю, указывает, что команда выполнена успешно, а ненулевое значение означает, что произошла ошибка.
Команда date выполнена успешно, и код выхода равен нулю:
Если вы попытаетесь запустить команду ls с несуществующим каталогом, код выхода будет ненулевым:
Код состояния можно использовать для выяснения причины сбоя команды. Страница руководства каждой команды содержит информацию о кодах выхода.
При выполнении многокомпонентного конвейера состояние выхода конвейера соответствует статусу последней команды:
Команда exit в Bash
Команда exit выходит из оболочки со статусом N. Он имеет следующий синтаксис:
Если N не указан, код состояния выхода соответствует коду последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit, возвращается в оболочку в качестве кода завершения.
Примеры
Статус выхода команд можно использовать в условных командах, таких как if. В следующем примере grepвыйдет с нуля (что означает true в сценариях оболочки), если «search-string» находится в filename:
При запуске списка команд, разделенных &&(and) или ||(or), состояние выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена только если cd вернет ноль:
Если сценарий заканчивает exit без указания параметра, код завершения сценария – это код последней команды, выполненной в сценарии.
Как использовать коды завершения в Bash-скриптах
Инструменты автоматизации и мониторинга удобны тем, что разработчик может взять готовые скрипты, при необходимости адаптировать и использовать в своём проекте. Можно заметить, что в некоторых скриптах используются коды завершения (exit codes), а в других нет. О коде завершения легко забыть, но это очень полезный инструмент. Особенно важно использовать его в скриптах командной строки.
Что такое коды завершения
В Linux и других Unix-подобных операционных системах программы во время завершения могут передавать значение родительскому процессу. Это значение называется кодом завершения или состоянием завершения. В POSIX по соглашению действует стандарт: программа передаёт 0 при успешном исполнении и 1 или большее число при неудачном исполнении.
Почему это важно? Если смотреть на коды завершения в контексте скриптов для командной строки, ответ очевиден. Любой полезный Bash-скрипт неизбежно будет использоваться в других скриптах или его обернут в однострочник Bash. Это особенно актуально при использовании инструментов автоматизации типа SaltStack или инструментов мониторинга типа Nagios. Эти программы исполняют скрипт и проверяют статус завершения, чтобы определить, было ли исполнение успешным.
Кроме того, даже если вы не определяете коды завершения, они всё равно есть в ваших скриптах. Но без корректного определения кодов выхода можно столкнуться с проблемами: ложными сообщениями об успешном исполнении, которые могут повлиять на работу скрипта.
Что происходит, когда коды завершения не определены
В Linux любой код, запущенный в командной строке, имеет код завершения. Если код завершения не определён, Bash-скрипты используют код выхода последней запущенной команды. Чтобы лучше понять суть, обратите внимание на пример.
Как использовать коды завершения в Bash-скриптах
Проверяем коды завершения
После рефакторинга скрипта получаем такое поведение:
Создаём собственный код завершения
Как использовать коды завершения в командной строке
Скрипт уже умеет сообщать пользователям и программам об успешном или неуспешном выполнении. Теперь его можно использовать с другими инструментами администрирования или однострочниками командной строки.
Скрипт использует коды завершения, чтобы понять, была ли команда успешно выполнена. Если коды завершения используются некорректно, пользователь скрипта может получить неожиданные результаты при неудачном выполнении команды.
Дополнительные коды завершения
Адаптированный перевод статьи Understanding Exit Codes and how to use them in bash scripts by Benjamin Cane. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.
Linux and Unix exit code tutorial with examples
Tutorial on using exit codes from Linux or UNIX commands. Examples of how to get the exit code of a command, how to set the exit code and how to suppress exit codes.
Estimated reading time: 3 minutes
Table of contents
What is an exit code in the UNIX or Linux shell?
An exit code, or sometimes known as a return code, is the code returned to a parent process by an executable. On POSIX systems the standard exit code is 0 for success and any number from 1 to 255 for anything else.
Exit codes can be interpreted by machine scripts to adapt in the event of successes of failures. If exit codes are not set the exit code will be the exit code of the last run command.
How to get the exit code of a command
In the following example the file does not exist.
The exit code is 1 as the operation was not successful.
How to use exit codes in scripts
To use exit codes in scripts an if statement can be used to see if an operation was successful.
If the command was successful the exit code will be 0 and ‘The script ran ok’ will be printed to the terminal.
How to set an exit code
Executing this script shows that the exit code is correctly set.
What exit code should I use?
How to suppress exit statuses
Sometimes there may be a requirement to suppress an exit status. It may be that a command is being run within another script and that anything other than a 0 status is undesirable.
Combining both the suppression of error output and the OR operation the following script returns a status code of 0 with no output even though the file does not exist.
Further reading
Have an update or suggestion for this article? You can edit it here and send me a pull request.
Recent Posts
About the author
George Ornbo is a UK based human.
He is interested in people, music, food and writing. In a previous version of himself he wrote books on technology.