Linux

Bash Loop - 當我在命令中按 Control-C 時如何停止循環?

  • July 2, 2018

我正在同步一些目錄。我打開了一個 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

引用自:https://serverfault.com/questions/105386