2016-10-09 36 views
0
#!/bin/bash 
while [ 1 ] 
do 
read -s -n 1 key 
echo -n $key && echo -n $key >> log 
done 

我保存這個殼爲run.sh和使用「./run.sh」 如果我輸入的字符非常快,在控制檯上 串,有時是從日誌文件中的字符串不同的運行它。爲什麼有些命令在Linux shell中被跳過?

./run.sh 
dhassudhasfuadhasfuash 
ctrl+c 
cat log 
dhasudhasfuadhasfuash 

如何解釋?

+0

'-n 1'使行被讀取無緩衝。我想如果你不把每個字符單獨寫到日誌文件中,而是把它們收集到一個變量中,並且如果你輸入完畢,把它們寫入日誌文件,你不會再有丟失的字符,或者只是非常少見。 – user1934428

+0

你可以在你的電腦上試試看這個奇怪的東西 – luchy0120

+0

你試過我的建議嗎? – user1934428

回答

0

奇怪,但你聽起來像是你遇到了在循環前寫到stdin的競爭條件,因爲有機會回到閱讀命令。

如何想的腳本,而不將靜音選項,所以你可以看到此時的字符被讀取...

read -p " reading:" -n 1 key 

,而我敢肯定,你會得到類似 閱讀: dd閱讀:hh閱讀:aa閱讀:sss閱讀:....