Bash循环永远不会结束

时间:2014-06-25 18:09:10

标签: bash

我想知道为什么这个剧本永远不会结束?

#! /bin/bash
for ip in `seq 200 254`; do
ping -c 1 192.168.0.$ip | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 &
done

但如果我选择不并行运行命令,脚本就会结束。

#! /bin/bash
for ip in `seq 1 254`; do
ping -c 1 192.168.0.$ip | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 
done  

有人可以解释一下,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

你的for循环正在做同样的事情。唯一的区别是,在第一个实例中,您在后台运行所有命令,并且不会看到终止。具体做法是:

ping -c 1 192.168.0.$ip | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 &
                                                                                ^^^

最后使用&运算符告诉bash后台进程。消除&会在执行可见的前台运行该进程。