从实验中可以清楚地看出,它的rsync
行为类似于其他工具,例如ping
并且不从调用 Bash 父级继承信号。
因此,您必须对此进行一些创意并执行以下操作:
$ cat rsync.bash
#!/bin/sh
set -m
trap '' SIGINT SIGTERM EXIT
rsync -avz LargeTestFile.500M root@host.mydom.com:/tmp/. &
wait
echo FIN
现在当我运行它时:
$ ./rsync.bash
X11 forwarding request failed
building file list ... done
LargeTestFile.500M
^C^C^C^C^C^C^C^C^C^C
sent 509984 bytes received 42 bytes 92732.00 bytes/sec
total size is 524288000 speedup is 1027.96
FIN
我们可以看到文件确实完全传输:
$ ll -h | grep Large
-rw-------. 1 501 games 500M Jul 9 21:44 LargeTestFile.500M
这个怎么运作
这里的诀窍是我们告诉 Bash viaset -m
禁用其中任何后台作业的作业控制。然后我们在后台rsync
运行一个wait
命令,该命令将等待最后一个运行命令rsync
,直到它完成。
然后我们用trap '' SIGINT SIGTERM EXIT
.
参考