1

私はシェルスクリプトをデバッグしているので、最初に 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

スクリプトのコマンド シーケンスと比較して実行シーケンスが逆になっています。これの何が問題で、どのように対処すればよいでしょうか。ありがとう!

4

2 に答える 2

1

これらの行はバックグラウンドで処理されているため、からの出力はset -x、プログラムを実行するために生成されたサブシェルからのものでありsleep、サブシェルが出力を生成するポイントに進む前に、メインシェルがコマンドに到達すると思います。sleepこれは、コマンドが最初に表示される理由を説明します。他の2つについては、CPUの数、システムのビジー状態など、タイミングによっては同期が取れていないため、逆の順序で取得することもあると思います。サブシェル間のは疑似非決定論的です...

于 2012-10-31T18:29:28.080 に答える
0

バックグラウンド プロセスとして実行するには、最初の 2 行が必要ですか?

そうでない場合は、最後の を削除して&、もう一度やり直してください。

于 2012-10-31T18:20:57.187 に答える