外壳脚本执行序列



我正在调试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

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

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

您是否需要前2行以作为背景过程运行?

如果不是,请在末端卸下&,然后重试。

最新更新