「一部」トラップを一時的に無効にしてから再度有効にします。

「一部」トラップを一時的に無効にしてから再度有効にします。

無効にする必要があります一部(すべてではありません)トラップは一時的に私の機能にあり、再びアクティブになります。しかし、これを行うと、予期しない動作が発生します(トラップとシグナルに初めて触れる人にもかかわらず)。

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)

関連情報