次のスクリプトがあります
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while :
do
echo "Hello"
done
Ctrl- を押すと、Cwhileループは停止せず、echo bye
実行されません。
次のような場合でも同じことが起こります。
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while echo -n ""
do
echo "Hello"
done
SIGINT
トラップがシグナルを無視するのはなぜですか?
答え1
実行されますが、echo bye
表示できません。これをwhileループに追加すると表示さsleep 0.5
れます。
trap
Ctrl / Cを使用したため、whileループは停止しません。コードを終了するには、exit
次のコマンドを追加する必要があります。trap
#!/bin/bash
#
gotcha()
{
echo "Bye"
exit 1
}
trap gotcha SIGINT
while :
do
echo "Hello"
sleep 0.5
done
この機能について知っておくべき重要なことの1つtrap
は、スクリプトの現在のコマンド(それが何であれ)が実行を完了するまで実行されないことです。したがって、長期実行コマンドを中断するために必ず使用する必要はありません。