Вот пример:
$ (newline=$'\n'; bash -c "trap 'trap ERR; echo handler' ERR; set -e;${newline}/bin/false")
Обработчик выполнится, если я выполню одно из следующих действий:
- удалить перевод строки
- ловушка на выходе вместо
- добавить еще одну команду в конце
Я подозреваю, что bash имеет оптимизацию, чтобы просто вызывать exec, если есть только одна команда, и запускается ее символ новой строки, за которым следует одна команда.
У меня есть косвенные доказательства: я бежал под натяжкой; более ранние cmds будут vfork, а затем execve, но последний просто вызывает execv.
Я столкнулся с этим с использованием GNU make.ONESHELL и ловушка для печати кода завершения и имени файла журнала, но если последнее не удается, ловушка не выполняется.
Заранее спасибо.