如何将终端中的 dd 进度重定向到 log.txt 文件,但在过程中仍将其显示在终端上?

如何将终端中的 dd 进度重定向到 log.txt 文件,但在过程中仍将其显示在终端上?

这是我的脚本:-

sudo mate-terminal --geometry=50x10 -x sh -c "dd if=/dev/sda of=/dev/sdb status=progress 2>&1 | tee log.txt | md5sum > hash.txt | sha1sum > hash1.txt"

我一直看到人们给出这个建议;输入 2>&1。但这只会在 log.txt 文件中显示进度,终端不会显示任何内容。这是 log.txt 文件中进度的图片。

日志档案

如果我删除2>&1并只使用

command | tee log.txt

只有终端会显示进度,log.txt文件中不会显示任何内容

我也尝试过:-

(command 2>&1) | log.txt

command 2> | log.txt

还有更多我记不清了。有人能帮我吗?

答案1

tail -f进度输出到 STDERR 而不是 STDOUT。您可以通过对正在写入的文件执行如下操作来获得所需的结果:

mate-terminal --geometry=50x10 -x sh -c 'tail -f log.txt'
sudo dd if=/dev/sda of=/dev/sdb status=progress 2> log.txt"

tail -f log.txt会将写入的所有内容打印log.txt到新的较小终端并作为后台进程运行,以便您可以在运行时发出更多命令。
2>将 STDERR 流发送到log.txt。如果 STDOUT 上有任何输出,它将显示在运行命令或脚本的终端中。

答案2

在 bash 中重定向 stderr 和 stdout |&

sudo mate-terminal --geometry=50x10 -x bash -c "dd if=/dev/sda of=/dev/sdb status=progress |& tee log.txt"

相关内容