Почему поведение прерывания ERR отличается в версиях bash 3 и 4?

Я не могу найти ничего о "чем-то полезном", которое вы можете сделать в это время (хотя некоторые случайные недокументированные функции меня не удивят). Однако похоже, что это поведение предназначено для «экономии энергии» (за счет того, что не нужно будить графический процессор и перерисовывать экран при каждом мигании).

См. Связанный с вопрос и (отклоненный) ошибка GNOME .

2
19.02.2019, 19:51
1 ответ

Это похоже на ошибку в Bash 3.2.

Я не могу найти запись в журнале изменений , которая бы прямо соответствовала этому. Есть только расплывчатое упоминание об изменении поведения параметра errexitдля соответствия консенсусу POSIX (пункт lв переходе с bash -4.0 -rc1 на bash -4.0 -выпуск ).

Это может быть связано, так как есть аналогичная проблема с errexit, это не вызывает ее в Bash 3.2, но делает в Bash 4.0 (она не должна ничего печатать, так как оболочка должна выйти, когда команда подоболочки терпит неудачу):

$./bash3.2 -c 'set -e; (exit 1); echo end.'
end.

Обратите внимание, что проблема здесь, похоже, в подоболочке, так как она работает в обеих версиях:

$./bash3.2 -c 'trap "echo ERROR" ERR; false'
ERROR
2
27.01.2020, 22:08

Теги

Похожие вопросы