キーボード入力を介してbashループを終了するには?

キーボード入力を介してbashループを終了するには?

bash loppにはASがあります。

#!/bin/bash
for (( c=0; c<=1000000; c++ ))
do  
SOME STUFF HERE
done

キーボード入力で長いループを中断しましたが、Ctrl+CスクリプトCtrl+Cは終了しました。現在のループを続行し、STUFF現在のループで実行が完了した後にループを中断するための代替案を探しています。

答え1

1つの方法は、次のようにControl-Cを使用してtrap信号を送信してbreak終了することですloop

#!/bin/bash
trap break INT
for (( c=0; c<=1000000; c++ ))
do  
SOME STUFF HERE
done
echo "I have broken out of the interminably long for loop"
trap - INT
sleep 1
echo "END."

これがどのように機能するかについての詳細は次のとおりです。

trap break INT

そして

trap - INT

INT「break」を使用して(break、別名SIGINT)信号が生成されたとき(Ctrl + Cを押すと発生します)、breakを実行してループを中断したいとトラップに通知します。

"break"の代わりに引用符でシェルコマンドを置くことができ、与えられた信号(私たちの場合はINT)が生成されたときに実行されます。

最後に、トラップを再実行して-「INT」ハンドラをデフォルトのジョブに復元します。

以下は、追加資料のためのいくつかのリソースと例です。

関連情報