Comando para imprimir la salida a la consola y al archivo al mismo tiempo en diferentes subprocesos

Comando para imprimir la salida a la consola y al archivo al mismo tiempo en diferentes subprocesos

Estoy escribiendo un script bash y me gustaría que el último comando comience como un proceso separado. El último comando también envía todos los resultados a un archivo. Sin embargo, también quiero que el resultado siga apareciendo en la consola. Lo que tengo hasta ahora es,

$ command > "file" &

Esto envía la salida al "archivo" y también inicia el comando como su propio proceso. Sin embargo, también quiero ver el resultado en la consola al mismo tiempo (pero si presiono ctrl+c o w/e, el comando no se detiene). Esto es muy parecidoesta pregunta, pero con la caviat de que necesita ser su propio hilo conductor.

Yo he tratado:

$ command | tee "file" &

pero el problema es que la camiseta es parte del proceso y el resultado en realidad no aparece.

Entonces, solo para aclarar, quiero tener commandsu propio proceso, enviar la salida a un archivo, pero aún así la salida aparece en la consola (hasta que presione q, enter, ctrl+c o algo así). Dado que esto está en un script bash, serían aceptables dos líneas separadas.

Respuesta1

Parece que desea commandterminar de escribir en el archivo, pero desea poder interrumpir la visualización en la consola. Yo adoptaría un enfoque diferente para la solución. En tu guión:

> "file"
command > "file" &
tail -n +1 -F "file"

Corrección:

La respuesta original utilizada -n 0, que inicialmente no genera líneas de "file"pero genera cualquier línea agregada "file"después de tailiniciar. Esta no era mi intención; fue un error. Tenía la intención de utilizar una opción que enumerara todas las líneas "file"incluso si commandhubiera escrito algunas antes de tailcomenzar. La opción correcta para ese comportamiento es -n +1.

Desde la tail(1)página de manual:

   -n, --lines=K genera las últimas K líneas, en lugar de las últimas 10;
                   o use -n +K para generar líneas que comiencen con Kth

La primera línea borra el contenido del archivo en caso de una condición de carrera que tailllegue al archivo antes command.

información relacionada