Bash: ожидать другого кода выхода с помощью set -e - PullRequest
0 голосов
/ 02 июня 2019

Рассмотрим сценарий bash, который выполняется с включенным set -e (выход при ошибке).

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

Пример:

set -e

./mycommand  # only continue when exit code of mycommand is '3', otherwise terminate script

...

Ответы [ 2 ]

3 голосов
/ 02 июня 2019

Это будет состоять из двух частей: обнаружение кода ошибки 3 и превращение нуля в другое

Одно из возможных решений будет следующим:

mycommand && false || [ $? -eq 3 ]

Первый оператор && поворачиваетНулевой код выхода до 1 (с false - изменить на что-то другое, если 1 следует считать «хорошим»), а затем с помощью теста изменить «хороший код выхода» на 3.

Проще,более простой в обслуживании способ - использовать подоболочку:

( mycommand; [ $? -eq 3 ] )

Эта подоболочка будет нормально запускать mycommand, а ее код выхода будет кодом последней подкоманды.Просто убедитесь, что вы не shopt -s inherit_errexit разрушите это:)

1 голос
/ 02 июня 2019

Без использования set -e, которое Чарльз Даффи указал в комментарии, проблематично:

# don't use set -e

./mycommand
if (( $? != 3 ))
then
    exit
fi

# more script contents follow

Вы можете сократить это до:

# don't use set -e

./mycommand
(( $? != 3 )) && exit

# more script contents follow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...