我正在调试一个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
因此,与脚本中的命令序列相比,执行顺序是相反的 这有什么问题以及如何处理它? 谢谢!
答案 0 :(得分:1)
由于这些行是后台运行的,我认为set -x
的输出来自生成运行程序的子shell,并且主shell在子shell进行之前到达sleep
命令到了他们产生输出的程度。这可以解释为什么sleep
命令首先出现。关于其他两个,我认为你可能偶尔也会以其他顺序得到它们,因为两者之间没有同步 - 取决于你有多少CPU,系统有多忙等等,时机子壳之间是伪非确定性的......
答案 1 :(得分:0)
您是否需要前两行作为后台进程运行?
如果没有,请删除最后的&
,然后重试。