Ожидать, что проверка кода выхода в ловушке выхода будет ненулевой, если выход из-за проверки переменной

#bash #shell

#bash #оболочка

Вопрос:

Я ожидаю, что следующий скрипт завершит работу, записав на экран ненулевое целое число, но на самом деле он записывает 0 . Если я закомментирую trap exiting EXIT , выполню, а затем выполню echo $? с консоли, я получу то, что ожидаю, ненулевой код выхода. Я бы ожидал, что оба потока вернут один и тот же ненулевой код выхода. Например, если я раскомментирую exit 10 , то оба потока, с ловушкой и без нее, печатают 10 .

Это ошибка с переменным тестированием?

 #!/usr/bin/env bash
function exiting {
    echo $?
}
trap exiting EXIT

# exit 10

: ${foo?'where is foo?'}
  

Комментарии:

1. Я не могу повторить указанное поведение. См . ideone.com/PvXrEz — он пишет 1 , что нет 0 . Это означает, что он уже был поднят вверх по потоку и исправлен, если вы не используете более новую версию bash, чем сборка 5.0.3, которая ideone.com в настоящее время есть. К какому моменту: какой релиз вы используете?

2. Да. Вот и все! Я использовал версию по умолчанию, которая поставляется с OSX. Я обнаружил, что у меня не было declare -g опции, которая побудила меня проверить версию и обновить, используя эти инструкции itnext.io/upgrading-bash-on-macos-7138bd1066ba . Спасибо за запуск моей репро и за ссылку ideone. Какой отличный ресурс! Очень признателен!