bashスクリプトがあります
何度も繰り返し、繰り返しの間に、おそらく長時間休止するforループがあります。それから
結果をファイルに書き込んで終了します。
時々、多くのループ反復が完了する前に所望の結果が得られる。
break
この場合、forループを終了するスクリプトが必要です。これは次のようになります。
何かをする
眠る
このようにして、これまでに収集されたデータのレポートファイルを作成するforループの後、残りのスクリプトを実行し続けます。
break
forループから離れるためにキーの組み合わせ(CTRL + Qなど)を使用したいと思います。
スクリプトは次のとおりです。
#!/bin/bash
for (( c=0; c<=$1; c++ ))
do
# SOME STUFF HERE
# data gathering into arrays and other commands here etc
# sleep potentially for a long time
sleep $2
done
#WRITE REPORT OUT TO SCREEN AND FILE HERE
ベストアンサー1
この種の作業を実行してからかなりの時間が経過しましたが、以前は次の作業が行われたことが記憶されています。
#!/bin/bash
trap break INT
for (( c=0; c<=$1; c++ ))
do
# SOME STUFF HERE
# data gathering into arrays and other commands here etc
echo loop "$c" before sleep
# sleep potentially for a long time
sleep "$2"
echo loop "$c" after sleep
done
#WRITE REPORT OUT TO SCREEN AND FILE HERE
echo outside
アイデアは循環を破るためにCtrl使用することです。Cシグナル(SIGINT)がトラップによってキャプチャされ、ループを中断し、残りのスクリプトを実行し続けることができます。
例:
$ ./s 3 1
loop 0 before sleep
loop 0 after sleep
loop 1 before sleep
^Coutside
これについて質問がある場合は、お知らせください。