Linux
Bash Loop - 當我在命令中按 Control-C 時如何停止循環?
我正在同步一些目錄。我打開了一個 bash 終端,正在執行如下操作:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
但是,如果我想停止所有事情,我按 Control-C。這會停止 rsync,但它會繼續進行下一個。在這種情況下,我意識到發生了什麼,然後像瘋子一樣按 Control-C,直到一切恢復正常。
有沒有辦法“解決”這個問題。我想要它,所以如果我有這樣的循環,然後按 Control-C,它將返回我的 bash shell。
for DIR in * ; do rsync -a $DIR example.com:somewhere/ || break; done
如果單個 rsync 執行由於某種原因失敗,這也將退出循環。
為了擴展丹尼斯的答案,您的程式碼可能如下所示:
trap "echo Exited!; exit;" SIGINT SIGTERM
對於一個工作範例(恰好涉及 rsync),請查看http://gist.github.com/279849。