我正在同步一些目录。我打开了一个 bash 终端,正在执行如下操作:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
但是,如果我想停止所有事情,我按 Control-C。这会停止 rsync,但它会继续进行下一个。在这种情况下,我意识到发生了什么,然后像疯子一样按 Control-C,直到一切恢复正常。
有没有办法“解决”这个问题。我想要它,所以如果我有这样的循环,然后按 Control-C,它将返回我的 bash shell。
如果单个 rsync 运行由于某种原因失败,这也将退出循环。
为了扩展丹尼斯的答案,您的代码可能如下所示:
对于一个工作示例(恰好涉及 rsync),请查看http://gist.github.com/279849。
您可以为 Control-C 设置陷阱。
将在
command
按下 Control-C 时执行。只需将trap
语句放在脚本中您希望它生效的位置即可。Ctrl-Z
暂停脚本;kill %%
此答案中的学分、解释和更多详细信息。
当您将一串命令放在括号内时,该字符串将充当单个进程,并在您点击Ctrl-时接收 SIGINT 并终止C:
但!在
rsync
命令的情况下,它允许多个源,因此您编写的代码最好写为:我倾向于在我的循环中放置另一个很容易被中断的命令。它需要按下两个 ctrl-C。
对于您可能希望快速运行的 rsync,这不是一个很好的解决方案。但它确实适用于其他循环,比如这个:
此循环将在每次循环中重新查找 example.com 的地址,如果您正在监视 DNS 更改,这将很有用。