簡體   English   中英

如何停止執行bash腳本?

[英]How do I stop execution of bash script?

我有一個循環腳本:

until [ $n -eq 0 ]
do
    tcpdump -i eth0 -c 1000000 -s 0 -vvv -w /root/nauvoicedump/`date "+%Y-%m-%d-%H-%M"`.pcap
    n=$(($n-1))
    echo $n 'times left'
done

我想了解如何停止執行此腳本? <CTRL> + <C>僅停止循環的后續迭代。

SIGINT不會終止'循環的后續迭代'。 而是,當您鍵入ctrl-C時,您將SIGINT發送到當前正在運行的tcpdump實例,並在循環終止后繼續循環。 避免這種情況的一種簡單方法是在shell中捕獲SIGINT

trap 'kill $!; exit' INT
until [ $n -eq 0 ]
do
    tcpdump -i eth0 -c 1000000 -s 0 -vvv -w /root/nauvoicedump/`date "+%Y-%m-%d-%H-%M"`.pcap&
    wait
    n=$(($n-1))
    echo $n 'times left'
done

請注意,您需要在后台(附加運行tcpdump的&來啟動它的線)這個工作。 如果您正在運行其他后台作業,則可能需要wait $! 而不是wait

您應該將n的起始值設置為至少高於0的示例。示例:

n=100
until [ "$n" -eq 0 ]
...

正確引用變量也是一種很好的做法。

如果你使用for循環也可能更好:

for (( n = 100; n--; )); do
    tcpdump -i eth0 -c 1000000 -s 0 -vvv -w "/root/nauvoicedump/$(date '+%Y-%m-%d-%H-%M').pcap"
    echo "$n times left"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM