2016-03-10 83 views
3

我正在製作一個腳本,它在任務後讀取答案,然後將其寫入文本文件中。我想這個答案是隻有一個字:如何在bash中清除輸入

task1 
read -n 1 answer < /dev/tty 
echo $answer >> result.txt 
task2 
read -n 1 answer < /dev/tty 
echo $answer >> result.txt 

問題是,如果我不小心按兩次鍵鍵盤,在第2個字符保留在內存並把它寫爲下一個答案。

我想插入一平的第一個字符後的內存寫入file.txt的 感謝

+0

沒有必要指定「 mrg

+0

我正在做的任務重定向標準輸入。我同意在這篇文章中沒有必要,我應該刪除它 – Sylvain

+0

問題是shell從不直接從鍵盤讀取;它從文件中讀取,並且它無法控制寫入該文件的內容。您的終端仿真器是需要配置此行爲的地方。 – chepner

回答

2

由於您未使用輸入來捕獲答案,您需要建立延遲以確定什麼是意外按下。因此,讀完第一個字符後,您可以使用read -e -t2在2秒內丟棄任何按鍵。

task1 
read -n 1 answer 
echo $answer >> result.txt 
read -e -t2 #Discard additional input within 2 seconds. 
task2 
read -n 1 answer 
echo $answer >> result.txt 
read -e -t2 #Discard additional input within 2 seconds. 
2

只需添加一個read將吞下高達下一cariage返回行的命令。

task1 
read -n 1 answer 
echo $answer >> result.txt 
read 
task2 
read -n 1 answer 
echo $answer >> result.txt 
read 
+0

我希望我的腳本在「閱讀-n 1答案」後自動繼續閱讀下一行。如果我添加另一個閱讀,我必須按回車繼續,如果我添加「閱讀-n 1」它不會繼續,如果我只按一次 – Sylvain

+0

你是對的。請參閱@ arton-dorneles的答案。 – cadrian

0

試試這個:

task 1 
read first 
answer=`cut -b1 <<<$first` 
echo $answer >> result.txt 

task 2 
read second 
answer=`cut -b1 <<<$second` 
echo $answer >> result.txt 

沒有辦法來刷新外殼輸入緩衝區。