我想构建一个执行命令的 bash 脚本,同时执行其他操作,如果脚本被终止,则有可能终止命令。比如说,执行一个大文件的 cp,同时打印自复制开始以来耗时,但如果脚本被杀死,它也会杀死副本。 我不想使用 rsync,有两个原因:1) 速度慢 2) 我想学习如何使用它,它可能会有用。 我试过这个:
until cp SOURCE DEST
do
#evaluates time, stuff, commands, file dimensions, not important now
#and echoes something
done
但它不会执行 do - done
block ,因为它正在等待复制结束。你能建议点什么吗?
最佳答案
until
与 while
相反。这与在另一个命令运行时做事无关。为此,您需要使用 &
在后台运行您的任务。
cp SOURCE DEST &
pid=$!
# If this script is killed, kill the `cp'.
trap "kill $pid 2> /dev/null" EXIT
# While copy is running...
while kill -0 $pid 2> /dev/null; do
# Do stuff
...
sleep 1
done
# Disable the trap on a normal exit.
trap - EXIT
kill -0
检查进程是否正在运行。请注意,它实际上并不像名称所暗示的那样向进程发出信号并终止它。至少不是信号 0。
关于bash - 命令运行时执行 bash 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165057/