#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. Какой отличный ресурс! Очень признателен!