Bash
使用任何特定鍵終止包含長時間睡眠和其他內容的 BASH For 循環
我有一個 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
如果您對此有任何問題,請告訴我。