2016-02-10 172 views
1

我得到了我一個小秒錶,我投入的.bashrc用下面的代碼:擊斷while循環由用戶輸入

stopwatch() { 
    date1=`date +%s` 
    echo $1 
    while true; do 
      echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r" 
    done 
} 

的輸出中應該是這樣的,而當時只想計數在第二行:

~$ stopwatch test 
test 
00:00:04 

現在,如果我想結束秒錶我按下Ctrl + C,給了我這樣的:

~$ stopwatch test 
test 
^C:00:03 

我想用包含輸出的方式結束循環。我的輸入密鑰或任何其他。 但是,如果我使用閱讀它會等待我的輸入,並保持計時器。

如何保持循環運行,直到我按下仍保留輸出的任何鍵?

編輯:雖然在它.. 是否有可能在退出之前將最後一個輸出寫入文件?

回答

3

添加到123的答案,因爲我不能評論。 而不是使用

kill %1 

使用

kill $! 

因爲,有可能會在殼體上的其它幾項工作,殺死1%能殺死其他工作一樣,所以以使其更加靈活$!可以使用。

$!將返回當前shell上運行的最後一個函數的進程ID。

在後臺運行的循環與&

然後暫停功能與讀取。

當按下回車時寫入並殺死。

stopwatch() { 
date1=`date +%s` 
echo $1 
while true; do 
     echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r" 
done & 
read 
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)" > file 
kill $! 
} 
+0

這種包含輸出。 看起來像這樣: '〜$秒錶測試 測試 [1] 3606 00:00:04' – chris137