2016-10-09 35 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阅读:....