как узнать код возврата bash
Команда exit в Bash и коды выхода
Часто при написании сценариев Bash вам необходимо завершить сценарий при выполнении определенного условия или выполнить действие на основе кода выхода команды.
В этой статье мы рассмотрим встроенную команду exit Bash и статусы выхода выполненных команд.
Статус выхода
Каждая команда оболочки возвращает код выхода, когда она завершается успешно или безуспешно.
По соглашению нулевой код выхода указывает, что команда завершилась успешно, а ненулевое значение означает, что произошла ошибка.
Команда date завершена успешно, код выхода равен нулю:
Если вы попытаетесь запустить ls в несуществующем каталоге, код выхода будет отличным от нуля:
Код состояния можно использовать для выяснения причины сбоя команды. На странице руководства каждой команды содержится информация о кодах выхода.
При выполнении многокомандного конвейера статус выхода конвейера соответствует состоянию последней команды:
Команда exit
Команда exit закрывает оболочку со статусом N Он имеет следующий синтаксис:
Если N не задано, код состояния выхода — это код последней выполненной команды.
При использовании в сценариях оболочки значение, указанное в качестве аргумента команды exit возвращается оболочке как код выхода.
Примеры
При запуске списка команд, разделенных && (И) или || (ИЛИ), статус выхода команды определяет, будет ли выполнена следующая команда в списке. Здесь команда mkdir будет выполнена, только если cd вернет ноль:
Если сценарий завершается exit без указания параметра, код выхода из сценария — это код последней команды, выполненной в сценарии.
Вот пример, показывающий, как завершить сценарий, если он запущен пользователем без полномочий root:
Выводы
Каждая команда оболочки возвращает код выхода при завершении. Команда exit используется для выхода из оболочки с заданным статусом.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Bash: как поймать код возврата фонового процесса?
А можно ли в Bash узнать код возврата фонового процесса?
Как сие можно провернуть?
Если запускаемый процесс зависнет по ин/оуту (а в моем случае он может) то wait тоже зависнет. То есть, нужно либо получить код возврата, либо прибить процесс по истечении некоторого времени.
Прибить процесс не проблема, ибо известен ПИД. А как поймать код возврата в вышеозначенных условиях?
wait может сообщить статус уже убитого процесса:
Но это всё не нужно, поскольку есть утилита timeout:
нужно либо получить код возврата, либо прибить процесс по истечении некоторого времени.
.
Если команда завершилась по таймауту, то код завершения 124. Иначе
возвращается полученный код завершения КОМАНДЫ. Если сигнал не задан
то по таймауту посылается сигнал TERM.
возвращается полученный код завершения КОМАНДЫ
Вот тут поточнее. Что будет возвращено в случае выполнения строки команд, разделенных символом «;»? Что будет в случае команды вызова скрипта?
Что будет возвращено в случае выполнения строки команд, разделенных символом «;»?
Проблема все еще не решена.
Wait не работает так как описано. Пример:
С утилитой timeout вообще непонятки. Ее по каким-то причинам нет в CentOs 5.8. Так что воспользоваться ей не могу.
Wait не работает так как описано.
Наверное, я плохо пояснил: wait возвращает exit code процесса в своём exit code:
С утилитой timeout вообще непонятки. Ее по каким-то причинам нет в CentOs 5.8. Так что воспользоваться ей не могу.
timeout появился в coreutils в районе версии 7.3. Есть ещё утилита timelimit с похожим функционалом.
Возможно, апплет timeout есть в busybox:
Если запускаемый процесс зависнет по ин/оуту (а в моем случае он может) то wait тоже зависнет.
Как вариант можно по истечении необходимого интервала времени выполнить
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 и как получить статус вывода / код команды.
Баш условия и коды возврата
Есть скрипт. Нужна возможность на любом этапе его выполнения остановить работу. Т.е. все, что в нем вызывается, если нажали Ctrl+C то нужно остановить полностью, а не только ту шляпу, которая сейчас выполнялась.
Там предлагают варианты проверки кода возврата. Ок. Это я беру.
А что насчет Ctrl+C? Будет ли это действовать на эту провреку? И вообще как правильно сделать?
Как это правильно приготовить?
Не совсем понял. Если вы по Ctrl+C останавливаете скрипт, то дальше ничего и не будет выполняться. Скрипт уже остановлен.
А вот нихрена! Та штука внутри ифа это вызов внешней программы и когда я останавливаю, то останавливается только программа, и продолжает выполнять то что ниже ифа.
man как правильно пнуть человека в сторону поиска решения
Какой хитрый )) Одним файлом нужно.
Если some_external_command будет прервана по ctrl+c, то получим ненулевой код возврата и выполнится exit (с тем же кодом)
Ну уж простите, не распарсил задачу до конца 🙂
это же bash. привыкай
BASH exit code
Самое частое применение — скрипты, для которых нужно предусмотреть возможность прерывания извне. Например, закончившееся пространство на диске при размещении на нем резервной копии данных. Или автоматизированный перенос сайта с одного сервера на другой.
Большая часть программ возвращают 0 при успешном выполнении и коды отличные от нуля при возникновении ошибок.
Это 1 или другой код, для каждой утилиты коды ответа описаны в документации.
Вывести код выполнения последней команды можно так:
Для демонстрации будем использовать HTML файл со случайным текстом.
Проверим равняется ли возвращаемое значение единице
Т.е. паттерн не найдем в файле. bash exit code можно просто выводить в консоль
При обнаруженном совпадении:
looki-for
0
Если совпадения нет:
Если произошла ошибка — например, отсутствует файл в котором утилите grep дано указание искать
grep: site2.html: No such file or directory
2
Коды для каждой утилиты нужно искать в документации, awk, например, всегда будет возвращать 0
Exit code может принимать значения от 0 до 256.
Exit code при написании скриптов
При написании скриптов стоит учитывать, что в приведенном выше примере речь идет об одной команде. Если это несколько команд, выполняющиеся одна за другой ошибку можно пропустить проверяя exit code одной из них.
grep: site2.html: No such file or directory
2
hey
0
Поэтому лучше всего объединять последовательность команд в отдельный скрипт или функцию и проверять код выхода скрипта или функции.
some bash code
what to do if errors detected
За счет нее также можно предусмотреть действие выполняемое в случае если bash скрипт возвращает exit code, который говорит о неуспешном выполнении.
Таким действием обычно является запись информации в лог, отправка уведомления администратору или удаление временных фйлов.