我要疯了!
当我运行这个 bash(概念教授)脚本并足够快地输入它时,它会失去周期:
# cat sample
#!/bin/bash
tail -n 0 -f log | while read l
do
SSH_CMD=$( ssh myhost.sample.com 'ls' )
X=$( ping -c3 $l )
echo $( echo "$X" | grep 'time=' | tail -1 | sed 's/.*\(time=.*\) .*/\1/' )
done
# ./sample&
[1] 32434
# echo 8.8.8.8 >> log
time=5.17
# #->THIS IS OK!
# echo -e "8.8.8.8\n8.8.8.8\n8.8.8.8" >> log
time=4.98
# #->DAMN! It runs only once instead of three times
如果我重复且足够快地发出同样的情况:
# echo 8.8.8.8 >> log
为什么while循环只运行一次(“失去”循环)而不是三次?
注意:如果我用 $( ssh ... ) 注释该行
#SSH_CMD=$( ssh myhost.sample.com 'ls' )
或将其替换为
SSH_CMD=$( sleep 3 && echo "blahhhshshs" )
并发出:
# echo -e "8.8.8.8\n8.8.8.8\n8.8.8.8" >> log
time=4.98
time=4.88
time=5.12
然后我用三行得到我的预期输出。似乎使用 ssh 的命令替换使得 while 循环失去循环。谁能解释为什么会发生这种溢出以及如何避免它,仍然使用 $( ssh .. ) (实际上我需要它来收集数据)?
干杯,AaWnSd