bash - 命令运行时执行 bash 循环

标签 bash shell

我想构建一个执行命令的 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 ,因为它正在等待复制结束。你能建议点什么吗?

最佳答案

untilwhile 相反。这与在另一个命令运行时做事无关。为此,您需要使用 & 在后台运行您的任务。

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/

相关文章:

bash - 我可以将默认值分配给 bash 中的数组吗?

PHP 在 exec() bash 脚本时挂起

python - Python3中中断的shell

linux - 最短线的长度?

用于从某些子目录中删除特定文件的 Bash 脚本

python - 命令行应用程序参数样式指南

bash - 仅在文件存在时附加到文件

bash - RTNETLINK 回答 : Device or resource busy

bash - 对于脚本提交,应该如何处理 Mercurial 的 "nothing changed"错误($? = 1)?

linux - 不同发行版的脚本