trap
alt kabuklara dağıtılmaz, ancak bazı yollar alt kabuğun ana kabuğun tuzaklarını rapor etmesine izin verirken, diğerleri bunu yapmaz. Ben bash ile macos üzerinde bazı testler yaptım.
GNU bash, sürüm 4.4.12 (1) -çalışma (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, sürüm 3.2.57 (1) -çalışma (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
Bu trap_output="$(trap)"
tuzak çıktı yakalamak için çalışacağını bilmek güzel . Eğer trap >trap_output_file
bir dosya (fifo çalışmaz bash 3.2.57
) çıktı ve daha sonra ile tekrar okumak için yapmak dışında işe yaramadı eğer bunu yapmak için başka bir yol düşünemiyorumtrap_output="$(<trap_output_file)"
fifo çalışmaz bash 3.2.57
çünkü trap &
boştur bash 3.2.57
ama değilbash 4.4.12
GNU bash, sürüm 4.4.12 (1) -çalışma (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, sürüm 3.2.57 (1) -çalışma (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