trap
서브 쉘에 전파되지 않지만 서브 쉘이 상위 쉘의 트랩을보고 할 수있는 방법도 있지만 그렇지 않은 방법도 있습니다. 나는 bash로 macos에 대해 몇 가지 테스트를 수행했다.
GNU bash, 버전 4.4.12 (1)-릴리스 (x86_64-apple-darwin16.3.0) :
trap 'echo hello' EXIT
trap # trap -- 'echo hello' EXIT
echo "$(trap)" # trap -- 'echo hello' EXIT
trap | cat # trap -- 'echo hello' EXIT
(trap) | cat # trap -- 'echo hello' EXIT
cat < <(trap) # empty
cat <<< "$(trap)" # empty
bash -c 'trap' # empty
trap & # trap -- 'echo hello' EXIT
GNU bash, 버전 3.2.57 (1)-릴리스 (x86_64-apple-darwin16) :
trap 'echo hello' EXIT
trap # trap -- 'echo hello' EXIT
echo "$(trap)" # trap -- 'echo hello' EXIT
trap > >(cat) # trap -- 'echo hello' EXIT
trap | cat # empty
(trap) | cat # empty
cat < <(trap) # empty
cat <<< "$(trap)" # empty
bash -c 'trap' # empty
trap & # empty
trap_output="$(trap)"
트랩 출력을 캡처 하는 데 도움 이됩니다. trap >trap_output_file
파일로 출력 하고 (오 작은 작동하지 않음) 파일 bash 3.2.57
을 다시 읽는 것 외에 작동하지 않으면 다른 방법을 생각할 수 없습니다.trap_output="$(<trap_output_file)"
비어 bash 3.2.57
있기 때문에 fifo가 작동 하지 않습니다.trap &
bash 3.2.57
bash 4.4.12
GNU bash, 버전 4.4.12 (1)-릴리스 (x86_64-apple-darwin16.3.0) :
mkfifo /tmp/fifo; trap >/tmp/fifo & trap_output=$(</tmp/fifo); rm -f /tmp/fifo; echo "$trap_output"
# trap -- 'echo hello' EXIT
mkfifo /tmp/fifo; trap_output=$(</tmp/fifo) & trap >/tmp/fifo; rm -f /tmp/fifo; echo "$trap_output"
# empty because trap_output=$(</tmp/fifo) sets the variable in a subshell
GNU bash, 버전 3.2.57 (1)-릴리스 (x86_64-apple-darwin16) :
mkfifo /tmp/fifo; trap >/tmp/fifo & trap_output=$(</tmp/fifo); rm -f /tmp/fifo; echo "$trap_output"
# empty because trap >/tmp/fifo & is empty since it uses trap &
mkfifo /tmp/fifo; trap_output=$(</tmp/fifo) & trap >/tmp/fifo; rm -f /tmp/fifo; echo "$trap_output"
# empty because trap_output=$(</tmp/fifo) sets the variable in a subshell