如何将“监视”的输出存储到文件中?

时间:2019-07-02 15:08:26

标签: linux shell watch

我正在尝试显示使用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

我不知道如何将该命令的输出重定向到文件。我的解决方案不起作用。

3 个答案:

答案 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进度的所有信息。

非常感谢。