Como redirecionar o progresso do dd no terminal para um arquivo log.txt, mas ainda exibi-lo no terminal durante o processo?

4

Aqui está o meu 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"

Eu vi pessoas dando essa sugestão o tempo todo; colocando 2 > & amp; 1. Mas isso só exibirá o progresso no arquivo log.txt e o terminal não exibirá nada. Aqui está uma imagem de como é o progresso no arquivo log.txt.

Se eu remover 2>&1 e apenas prosseguir com

command | tee log.txt

Apenas o terminal mostrará o progresso e nada será exibido no arquivo log.txt

Eu também tentei: -

(command 2>&1) | log.txt

command 2> | log.txt

e muito mais que não consigo lembrar. Então alguém pode me ajudar?

    
por Najmi 06.11.2016 / 09:58

2 respostas

3

Redireciona stderr e stdout com |& no bash:

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

O progresso é enviado para STDERR em vez de STDOUT. Você pode obter algo parecido com o que deseja, fazendo tail -f no arquivo que está sendo escrito:

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 imprimirá tudo que está sendo gravado em log.txt no novo terminal menor e será executado como um processo em segundo plano para que você possa emitir mais comandos enquanto ele é executado.
2> envia o fluxo STDERR para log.txt . Se houver alguma saída no STDOUT, ela será exibida no terminal a partir do qual o comando ou script é executado.

    
por Zanna 06.11.2016 / 11:27