trap
সাবসেলগুলিতে প্রস্তাবিত নয় তবে কিছু উপায়ে সাব-শেলকে প্যারেন্ট শেলটির ফাঁদগুলি রিপোর্ট করার অনুমতি দেয় এবং অন্যরা তা করে না। আমি বাশ দিয়ে ম্যাকোসে কিছু পরীক্ষা করেছি।
জিএনইউ বাশ, সংস্করণ 4.4.12 (1) -রেলিজ (x86_64-আপেল-ডারউইন 16.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
জিএনইউ বাশ, সংস্করণ 3.2.57 (1) -রিলেজ (x86_64-আপেল-ডারউইন 16):
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
কারণ trap &
খালি bash 3.2.57
তবে এটি নয়bash 4.4.12
জিএনইউ বাশ, সংস্করণ 4.4.12 (1) -রেলিজ (x86_64-আপেল-ডারউইন 16.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
জিএনইউ বাশ, সংস্করণ 3.2.57 (1) -রিলেজ (x86_64-আপেল-ডারউইন 16):
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