shell脚本执行顺序

时间:2012-10-31 18:16:16

标签: debugging shell

我正在调试一个shell脚本 所以我在开头添加set -x 代码段如下

tcpdump -i $interface host $ip_addr and 'port 80' -w flash/flash.pcap &
sudo -u esolve firefox /tor_capture/flash.html &
sleep $capture_time

但我注意到执行顺序如下

++ sleep 5
++ sudo -u esolve firefox /tor_capture/flash.html
++ tcpdump -i eth0 host 138.96.192.56 and 'port 80' -w flash/flash.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

因此,与脚本中的命令序列相比,执行顺序是相反的 这有什么问题以及如何处理它? 谢谢!

2 个答案:

答案 0 :(得分:1)

由于这些行是后台运行的,我认为set -x的输出来自生成运行程序的子shell,并且主shell在子shell进行之前到达sleep命令到了他们产生输出的程度。这可以解释为什么sleep命令首先出现。关于其他两个,我认为你可能偶尔也会以其他顺序得到它们,因为两者之间没有同步 - 取决于你有多少CPU,系统有多忙等等,时机子壳之间是伪非确定性的......

答案 1 :(得分:0)

您是否需要前两行作为后台进程运行?

如果没有,请删除最后的&,然后重试。