4

キーボード割り込みをキャプチャするbashの機能があります。関数は次のようになります。

user_interrupt(){
        echo -e "\n\nKeyboard Interrupt detected."
        sleep 2
        echo -e "\n Cleaning up..."
        rm -rf /usr/local/src/mysources
}

さて、同じスクリプト内にinstall()、標準./configureの , make,make installプロセスを使用して、ソースからいくつかのパッケージを次々にインストールするという別の関数があります。アイデアは、3 つのインストールを次々に実行している間にユーザーの割り込みをキャプチャすることです。問題は、次のステートメントをどこに置くかです。

trap user_interrupt SIGINT
trap user_interrupt SIGTSTP

install()では、関数内の最初のステートメントとして配置する必要がありますか? それともif-else条件が必要ですか?

4

1 に答える 1

7

exitユーザー割り込みを検出した後(もちろん、クリーンアップ行為が完了した後)にしたいと思います。exitその場合は、関数の行の後に言う必要がありrm -rf ...ます。そうしないと、たとえばtrapシグナルをキャッチして関数内のタスクを実行し、スクリプトは引き続き実行されます。SIGINTuser_interrupt

他の質問に答えるには、スクリプトの先頭で言及した関数を定義し、その後に 2 つのtrapコマンドを続け、その後に残りのコード (install()関数など) を定義します。 trap上記のシグナルをキャッチするため、明示的な処理は必要ありません。

于 2013-09-20T09:42:45.967 に答える