SIGTERM と SIGTSTP をトラップするスクリプトがあります。これは私がメインブロックに持っているものです:
trap 'killHandling' TERM
そして関数で:
killHandling () {
echo received kill signal, ignoring
return
}
... SIGINT についても同様です。問題は、ユーザー インターフェイスの 1 つです。スクリプトはユーザーに何らかの入力を求めるプロンプトを表示します。スクリプトが入力を待機しているときに SIGTERM または SIGINT が発生すると、混乱を招きます。その場合の出力は次のとおりです。
Enter something: # SIGTERM received
received kill signal, ignoring
# shell waits at blank line for user input, user gets confused
# user hits "return", which then gets read as blank input from the user
# bad things happen because of the blank input
次のように、これをよりエレガントに処理するスクリプトを見たことがあります。
Enter something: # SIGTERM received
received kill signal, ignoring
Enter something: # re-prompts user for user input, user is not confused
後者を達成するために使用されるメカニズムは何ですか? 残念ながら、スクリプトがユーザーにいくつかのことを要求し、プロンプトの内容はコンテキストに依存するため、トラップ コードを単純に変更して再プロンプトを実行することはできません。また、コンテキスト依存のトラップ関数を記述するよりも優れた方法が必要です。
私はどんな指針にも非常に感謝しています。ありがとう!