0

我要疯了!

当我运行这个 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

4

0 回答 0