2016-09-16 82 views
1

假設我有一個充當警報的腳本。假設你將它設置爲五分鐘,它執行以下操作:如何在執行期間允許暫停shell腳本?

printf '%s\n' 'Alarm set for 5 minutes' 
sleep 300 && printf '%s\n' 'Alarm!' 

我如何能實現一種爲暫停鍵持續監控,說「P」或「SPC」,然後等待,直到按下一個鍵再次恢復腳本的正常執行?我想讓用戶暫停鬧鐘。

編輯:爲了澄清,我想連續監測一個暫停鍵,而運行其他代碼。這與停止執行以聽取stin相反。

+1

的可能的複製[按Enter鍵或等待10秒才能繼續](http://stackoverflow.com/questions/9483633/press-enter-or-wait-10 -conds-to-continue) –

+0

這不是該特定問題的重複,因爲這裏沒有調用或讀取。 –

回答

1

這很容易,如果你接受發送信號的方法中止定時器來完成:

#!/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過程,如果這個過程是做更多的東西重要的是,你可能會想要終止它。 (而不是在陷阱裏什麼都不做,給孩子發信號。)

0

許多shell有內置的read函數,允許你從標準輸入讀取。你可以使用它來使你的程序互動。但是,如果你需要做這種I/O等,我認爲你應該從shell轉向一種真正的編程語言。

0

你可以做類似下面

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