Рассмотрим этот минимальный пример, который я запускаю как исполняемый файл.
#!/bin/bash
set -E
trap 'echo "ERR trap triggered"' ERR
(
echo "hello" >/dev/null
ls /root/
)
Обратите внимание на два сообщения-ловушки ERR в следующем выводе:
ls: cannot open directory '/root/': Permission denied
ERR trap triggered
ERR trap triggered
Однако, когда я заставляю подоболочку содержать один оператор, например:
#!/bin/bash
set -E
trap 'echo "ERR trap triggered"' ERR
(
ls /root/
)
Я получаю только одно сообщение-ловушку ERR:
ls: cannot open directory '/root/': Permission denied
ERR trap triggered
Я надеялся, что кто-нибудь сможет объяснить мне причину разницы в выходе. Спасибо!
ls
предоставляет статус выхода, отличный от нуля, и, следовательно, также статус выхода подоболочки. - person Cyrus   schedule 29.06.2020bash
оптимизирует подоболочку, когда в подоболочке есть только одна (не-оболочка) команда. - person chepner   schedule 29.06.2020