2012-01-27 96 views
0

我試圖在後臺運行tcpdump,同時通過eth0發送一些流量,然後在流量發送完成後啓動tcpdump進程。在命令行命令列表中使用tcpdump時出錯

當我在後臺運行tcpdump的單獨運行沒有錯誤:

bash~~$ sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap & 
[1] 19282 
bash~~$ tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 

bash~~$ 

然後,我可以pkill命令之後了tcpdump:

bash~~$ ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep tcpdump 
fred 20437 15842 0 11:55 pts/2 00:00:00 grep tcpdump 
fred 20467 15842 0 11:55 pts/2 00:00:00 grep tcpdump 
bash~~$ 

現在,當我把上面都在一起,我可以」 t似乎超過了最初的tcpdump調用:

bash~~$ sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap & ; ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep  tcpdump; 
-bash: syntax error near unexpected token `;' 
bash~~$ 

關於我失蹤的任何想法? tcpdump的行爲與其他函數不同嗎?

回答

2

and符&是管道終止與;&&||在一起。你不應該指定兩個不同的管道終結器,而是根據你的需要選擇一個。在這裏,你可能想從bash manpage

sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap & ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep tcpdump; 

相關摘錄:

A pipeline is a sequence of one or more commands separated by one of the control operators | or |& .

A list is a sequence of one or more pipelines separated by one of the operators ; , & , && , or ││ , and optionally terminated by one of ; , & , or <newline> .

+0

THX。在這個便利的列表中它的數字是21:http://mywiki.wooledge.org/BashPitfalls – amadain 2012-01-27 15:10:21