I модифицировано trap.sh
, чтобы включить опцию xtrace
.
#!/bin/bash
set -x
trap 'echo trapped' EXIT
exit 0
Запуск trap.sh
как скрипт производит
~ $ ./trap.sh | кот + ловушка 'эхо в ловушке' EXIT + выход 0 + эхо в ловушке ловушке
Sourcing это первый, однако производит
~ $ . trap.sh | cat
++ trap 'echo trapped' EXIT
++ exit 0
Это указывает на то, что trap
выполняется в более глубоком субоболочке (почему, Я не знаю), и что сама ловушка никогда не выполняется (я подтвердил во втором эксперименте touch
, введя в файл int he trap вместо того, чтобы просто эхом, в случае возникновения проблемы с наследованием стандартного вывода; никогда не касался).
Я думаю, что так или иначе EXIT
сигнал игнорируется до source
выполняемой команды, основываясь на этом предложении из описания команды trap
на странице человека:
сигналы игнорировались при записи к оболочке не может быть захвачен или сброшен.
В результате выполняется команда trap
, но сама ловушка никогда не регистрируется и поэтому не срабатывает.
Является ли какой-либо сценарий когда-либо выполняемым, так что рабочий каталог (cwd) не находится там, где есть скрипты? – wallyk
@wallyk Нет, это не сценарий. – dspjm