Estou executando um time dd
comando em um script de shell e gostaria de enviar os resultados para um arquivo e imprimi-lo na tela. A linha que estou executando atualmente é:
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
Embora isso esteja me deixando com um arquivo vazio e não seja exibido na tela. O que eu precisaria fazer para fazer todas as três coisas?
Observe que estou executando isso em um sistema embarcado com uma instalação do Busybox queNão incluitee
então isso não é uma duplicata deessa questão.
Responder1
O que você está mostrando funciona conforme o esperado no meu sistema. Tem certeza de que está usando bash
e não sh
? De qualquer forma, tentei with dash
e with busybox
e sh
funcionou lá também. Na ausência de tee
, acho que a única solução será cat $logfile
após a conclusão do comando.
Outra possibilidade seria criar um link para busybox
o chamado tee
e tentar executá-lo. O busybox
que veio com meu Debian suporta isso, mas não sei se o seu:
ln -s /bin/busybox /bin/tee
Em seguida, tente executar tee
normalmente.
Se você realmente não consegue tee
, sua única outra opção seria algo assim:
foo=$( ( time dd if="file1" of="file2" bs=12 count=5 ) 2>&1 &)
echo "$foo"
echo "$foo" >> logfile
Responder2
Você pode usar o tee
comando. Aqui agrupei os comandos time
e dd
usei o bloco de código para que eles sejam tratados como um único comando e sua saída possa ser tratada facilmente.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1|tee $log_file
Anote o ;
no final do segundo comando. Isso é obrigatório para que os blocos de código funcionem.
Caso você não queira usar tee
, você pode pensar sobre isso
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file