9

rm -rf /etc/XXX.pidシェルスクリプトの実行が途中で中断されたときに、「 」のようなコマンドを起動したい。ここで何をすべきかCTRL+C 誰か助けてくれますか?

4

2 に答える 2

15

多くの人にとってショックかもしれませんが、bashビルトインを使用してtrapシグナルをトラップすることができます:-)

まあ、少なくともトラップできるものですが、CTRL-C は通常、INT信号に関連付けられています。シグナルをトラップして、任意のコードを実行できます。

次のスクリプトは、テキストの入力を求め、それをエコー バックします。場合によっては、INT信号を生成すると、単にうなり声を上げて終了します。

#!/bin/bash

exitfn () {
    trap SIGINT              # Restore signal handling for SIGINT
    echo; echo 'Aarghh!!'    # Growl at user,
    exit                     #   then exit script.
}

trap "exitfn" INT            # Set up SIGINT trap to call function.

read -p "What? "             # Ask user for input.
echo "You said: $REPLY"

trap SIGINT                  # Restore signal handling to previous before exit.

テスト実行のトランスクリプトが続きます (完全に入力された行、入力前に CTRL-C を押した行、および CTRL-C を押す前に部分的に入力された行):

pax> ./testprog.sh 
What? hello there
You said: hello there

pax> ./testprog.sh 
What? ^C
Aarghh!!

pax> ./qq.sh
What? incomplete line being entere... ^C
Aarghh!!
于 2013-02-05T07:40:02.157 に答える
3

trapSIGINTCtrl-C が押されたときに生成されるシグナルなど、スクリプト内のシグナルをキャッチするために使用されます。

于 2013-02-05T07:25:55.613 に答える