Как перенаправить прогресс 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
и многое другое я не могу вспомнить. Так может кто-нибудь мне помочь?
2 ответа
Прогресс выводится в STDERR, а не в STDOUT. Вы можете получить что-то вроде того, что вы хотите, делая tail -f
на файл записывается так:
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, он будет отображаться в терминале, из которого запускается команда или скрипт.
Перенаправить как stderr, так и stdout с помощью |&
в bash:
sudo mate-terminal --geometry=50x10 -x bash -c "dd if=/dev/sda of=/dev/sdb status=progress |& tee log.txt"