Saída de impressão bonita de “kill -USR1” -ing dd

0

Quando dd é feito, ele imprime um resumo de três linhas sobre o número de segmentos lidos e gravados, o tamanho total e a velocidade média de gravação. Enquanto faz o seu trabalho, dd é muito quieto.

Não muito tempo atrás (mea culpa), descobri que posso fazer dd imprimir o resumo de três linhas enquanto ele ainda está trabalhando emitindo SIGUSR1 . Desde que eu fiz

dd <magic incantation> &
watch kill -USR1 $!

O problema é que, com isso, as três linhas do resumo de dd não são alinhadas à esquerda. Cada linha seguinte começa na coluna que a linha anterior terminou. Então, estou supondo que dd imprime um caractere de nova linha, mas não um retorno de carro e o que watch usa para imprimir a saída espera retornos de carro.

Eu tentei colocar | sed -e '<expression>' atrás do comando kill, diferentes tipos de citações, mas a saída que eu obtenho não muda nada.

Como posso imprimir a saída dd neste cenário?

    
por Bananguin 19.11.2015 / 10:56

1 resposta

1

Você não precisa de kill -USR1 para saber onde dd está. Você pode usar lsof para exibir a posição do seu descritor de arquivo de entrada. Obter saída parseable é um pouco abstruso, mas funciona. Observe que o 0 é o descritor do arquivo de entrada; se você passar um argumento if=… para dd , em vez de deixá-lo ler a partir da entrada padrão, dependendo da sua implementação de dd , ele poderá ler um descritor diferente.

lsof -a -o -p $! -d 0 -F o | sed -n 's/^o[0-9]*t//p'

No Linux, você pode obter essas informações diretamente de /proc .

</proc/$!/fdinfo/0 awk '$1 == "pos:" {print $2}'

Você também pode usar cat em vez de dd : muitas vezes é mais rápido e é menos propenso a erros .

    
por 20.11.2015 / 03:09

Tags