假設我有一個充當警報的腳本。假設你將它設置爲五分鐘,它執行以下操作:如何在執行期間允許暫停shell腳本?
printf '%s\n' 'Alarm set for 5 minutes'
sleep 300 && printf '%s\n' 'Alarm!'
我如何能實現一種爲暫停鍵持續監控,說「P」或「SPC」,然後等待,直到按下一個鍵再次恢復腳本的正常執行?我想讓用戶暫停鬧鐘。
編輯:爲了澄清,我想連續監測一個暫停鍵,而運行其他代碼。這與停止執行以聽取stin相反。
假設我有一個充當警報的腳本。假設你將它設置爲五分鐘,它執行以下操作:如何在執行期間允許暫停shell腳本?
printf '%s\n' 'Alarm set for 5 minutes'
sleep 300 && printf '%s\n' 'Alarm!'
我如何能實現一種爲暫停鍵持續監控,說「P」或「SPC」,然後等待,直到按下一個鍵再次恢復腳本的正常執行?我想讓用戶暫停鬧鐘。
編輯:爲了澄清,我想連續監測一個暫停鍵,而運行其他代碼。這與停止執行以聽取stin相反。
這很容易,如果你接受發送信號的方法中止定時器來完成:
#!/bin/sh
printf '%s\n' 'Alarm set for 5 minutes. ^C to continue'
sleep 300 &
trap : INT
if wait; then
echo Timer complete
else
echo Timer aborted
fi
注意,此實現實際上並沒有停止sleep
過程,如果這個過程是做更多的東西重要的是,你可能會想要終止它。 (而不是在陷阱裏什麼都不做,給孩子發信號。)
許多shell有內置的read
函數,允許你從標準輸入讀取。你可以使用它來使你的程序互動。但是,如果你需要做這種I/O等,我認爲你應該從shell轉向一種真正的編程語言。
你可以做類似下面
// alarm running = true
while true
do
//running running is true resume or start alarm
/** pseudo code
if running == true
start or resume alarm
else
pause alarm
your alarm start or re
**/
IFS= read -r -t 0.5 -n 1 -s holder && var="$holder"
if [ "$var" == "p" ]
then
#running = false
echo "You have pause your alarm "
elif [ "$var" == "R" ]
then
#running = true
echo "start your timer"
fi
done
的可能的複製[按Enter鍵或等待10秒才能繼續](http://stackoverflow.com/questions/9483633/press-enter-or-wait-10 -conds-to-continue) –
這不是該特定問題的重複,因爲這裏沒有調用或讀取。 –