这是我的脚本:-
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"