特定のキーを使用して、長い睡眠やその他の項目を含むBASH Forループを終了します。

特定のキーを使用して、長い睡眠やその他の項目を含むBASH Forループを終了します。

bashスクリプトがあります

  • 何度も繰り返し、繰り返しの間に、おそらく長時間休止するforループがあります。それから

  • 結果をファイルに書き込んで終了します。

時々、多くのループ反復が完了する前に所望の結果が得られる。

breakこの場合、forループを終了するスクリプトが必要です。これは次のようになります。

  • 何かをする

  • 眠る

このようにして、これまでに収集されたデータのレポートファイルを作成するforループの後、残りのスクリプトを実行し続けます。

breakforループから離れるためにキーの組み合わせ(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

これについて質問がある場合は、お知らせください。

おすすめ記事