How to redirect dd progress in terminal to a log.txt file but still display it on the terminal during the process?
Here is my script :-
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"
I've seen people giving this suggestion all the time; putting 2>&1. But this will only display the progress in the log.txt file and the terminal will display nothing. Here's a picture of what the progress look like on the log.txt file.
If I remove 2>&1
and just go with
command | tee log.txt
Only the terminal will show the progress and nothing will display in the log.txt
file
I've also tried:-
(command 2>&1) | log.txt
command 2> | log.txt
and many more I can't recall. So can someone help me?
The progress is output to STDERR rather than STDOUT. You could get something like what you want by doing tail -f
on the file being written to like this:
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
will print everything being written to log.txt
to the new smaller terminal and run as a background process so you can issue more commands while it runs.2>
sends STDERR stream to log.txt
. If there is any output on STDOUT it will display in the terminal from which the command or script is run.
Redirect both stderr and stdout with |&
in bash:
sudo mate-terminal --geometry=50x10 -x bash -c "dd if=/dev/sda of=/dev/sdb status=progress |& tee log.txt"