Bash

使用任何特定鍵終止包含長時間睡眠和其他內容的 BASH For 循環

  • January 26, 2019

我有一個 bash 腳本

  • 有一個 for 循環,它迭代很多次並在迭代之間休眠,可能會持續很長時間。那麼它
  • 將結果寫入文件,然後終止。

有時我會在許多循環迭代完成之前得到我需要的結果。

在這些情況下,我需要腳本break退出 for 循環,而它要麼是

  • 做事,或
  • 睡眠

這樣它將繼續執行腳本的其餘部分,在 for 循環之後,它正在編寫迄今為止收集的數據的報告文件。

我希望使用組合鍵,例如 CTRL+Q,break退出 for 循環。

腳本如下所示:

#!/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

我有一段時間沒有接觸過這類任務,但我記得曾經有這樣的事情:

#!/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

如果您對此有任何問題,請告訴我。

引用自:https://unix.stackexchange.com/questions/496881