Estoy ejecutando un time dd
comando en un script de shell y me gustaría enviar los resultados a un archivo e imprimirlo en la pantalla. La línea que estoy ejecutando actualmente es:
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
Aunque eso me deja con un archivo vacío y no aparece en la pantalla. ¿Qué necesitaría hacer para hacer las tres cosas?
Tenga en cuenta que estoy ejecutando esto en un sistema integrado con una instalación de Busybox queno incluyetee
entonces esto no es un duplicado deesta pregunta.
Respuesta1
Lo que estás mostrando funciona como se esperaba en mi sistema. ¿Estás seguro de que estás usando bash
y no sh
? En cualquier caso, probé con dash
y con busybox
y sh
funcionó allí también. En ausencia de tee
, creo que la única solución será cat $logfile
una vez finalizado el comando.
Otra posibilidad sería crear un enlace para busybox
llamar tee
e intentar ejecutarlo. El busybox
que vino con mi Debian lo admite pero no sé si el tuyo lo hará:
ln -s /bin/busybox /bin/tee
Luego, intenta ejecutar tee
normalmente.
Si realmente no puedes conseguirlo tee
, tu única otra opción sería algo como esto:
foo=$( ( time dd if="file1" of="file2" bs=12 count=5 ) 2>&1 &)
echo "$foo"
echo "$foo" >> logfile
Respuesta2
Puedes usar el tee
comando. Aquí he agrupado los comandos time
y dd
he usado el bloque de código para que sean tratados como un solo comando y su salida pueda manejarse fácilmente.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1|tee $log_file
Tome nota del ;
al final del segundo comando. Esto es obligatorio para que funcionen los bloques de código.
En caso de que no quieras usarlo, tee
entonces puedes pensar en esto.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file