我正在尝试显示使用dd命令复制的文件的状态进度:
我运行以下命令:dd if=/dev/zero of=file.txt count=1024 bs=10485760
然后在另一个终端中,运行以下命令以显示进度状态:
watch -n 1 kill -USR1 $pid_dd
我的问题是我试图将watch的输出重定向到文件,但是没有成功。
我已经尝试过此链接How to save output of "watch" to file上提出的解决方案
while true
do
watch -n 1 kill -USR1 $pid_dd | tee -a output_watch.txt
sleep 2
done
我不知道如何将该命令的输出重定向到文件。我的解决方案不起作用。
答案 0 :(得分:0)
我已经测试了上面的循环,而没有这样的“ watch”命令:
while true
do
kill -USR1 $pid_dd | tee -a output_watch.txt
sleep 2
done
问题是“ output_watch.txt”文件为空。我不明白为什么。
答案 1 :(得分:0)
kill -USR1 $pid_dd
什么也没输出。您确实已经成功捕获了其输出,该输出为空。它发送一个信号,使dd
进程(一个完全不同的进程)在 stderr上输出进度数据,而您没有重定向。
如果仅重定向dd ... 2>&1 | tee -a file
,将使确定所需dd
的PID变得更加困难。视您的外壳而定
dd ... 2> >(tee -a file) & pid=$!
watch -n1 kill -USR1 $pid
# you don't need a loop around watch, it already _is_ a loop
# or _instead_
while kill -USR1 $pid; do sleep 1; done
或者,请参见pv
,该文件已经可以满足您的要求(如果有)。尽管被描述为监视数据从一个进程到另一个进程的复制,但实际上它确实将stdin转换为stdout,后者可以(两者)都是文件而不是管道进程。
答案 2 :(得分:0)
完全是@dave_thompson!它有效,我已经编写了这段代码:
dd ... 2>>/home/file.txt & pid_dd=$!
watch -n 1 kill -USR1 $pid_dd
文件“ file.txt”具有有关dd进度的所有信息。
非常感谢。