無効にする必要があります一部(すべてではありません)トラップは一時的に私の機能にあり、再びアクティブになります。しかし、これを行うと、予期しない動作が発生します(トラップとシグナルに初めて触れる人にもかかわらず)。
function hello(){
cleanup(){
echo bye!!
}
trap cleanup RETURN EXIT INT
echo "hello!!"
echo "echo hello2!!" > file2
trap '' RETURN EXIT
source file2
sleep 10
trap cleanup RETURN EXIT <-- last line
}
私が見ると予想されるものは次のとおりです。
hello!!
hello2!!
bye!!
まあ、それは私が得たものです。しかし、(コードスニペットで指定された)最後の行をコメントアウトすると、INT信号のトラップを無効にせず、再び有効にする必要もないため、同じ出力が出ると予想しています。ただし、次のような結果が表示されます。これ:
hello!!
hello2!!
^C
意味はINTトラップも無効になっています。。しtrap '' RETURN EXIT
ているその他これら2つの信号を無視する代わりに?最初のケースも期待どおりに機能し、すべてのことについて私の理解が間違っているようです。
私はそれを使用していますGNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
。