bash - una - guardar salida de un comando en un archivo linux
cómo redirigir la salida de múltiples comandos a un archivo (3)
La mejor respuesta a esto es probablemente deshacerse de la ssh .... | grep ...
ssh .... | grep ...
y modifique la secuencia de comandos awk
en el otro comando para agregar la funcionalidad que estaba recibiendo del comando grep
...
Eso eliminará cualquier problema de intercalado como un efecto secundario adicional.
Tengo un script de bash, que tiene los siguientes dos comandos:
ssh host tail -f /some/file | awk ..... > /some/file &
ssh host tail -f /some/file | grep .... > /some/file &
¿Cómo puedo hacer que la salida de ambos comandos se dirija al mismo archivo?
Tenga en cuenta que puede reducir el número de llamadas ssh:
{ ssh host tail -f /some/file |
tee >(awk ...) >(grep ...) >/dev/null
} > /some/file &
ejemplo:
{ echo foobar | tee >(sed ''s/foo/FOO/'') >(sed ''s/bar/BAR/'') > /dev/null; } > outputfile
cat outputfile
fooBAR
FOObar
Use ''agregar'' con >>
o use llaves para abarcar las redirecciones de E / S, o (ocasionalmente) use exec
:
ssh host tail -f /some/file | awk ..... > /some/file &
ssh host tail -f /some/file | grep .... >> /some/file &
o:
{
ssh host tail -f /some/file | awk ..... &
ssh host tail -f /some/file | grep .... &
} > /some/file
o:
exec > /some/file
ssh host tail -f /some/file | awk ..... &
ssh host tail -f /some/file | grep .... &
Después del exec
, la salida estándar de la secuencia de comandos en su conjunto va a /some/file
. Rara vez utilizo esta técnica; Usualmente uso el { ...; }
{ ...; }
técnica en su lugar.
Nota: Tienes que tener cuidado con la anotación de llaves. Lo que mostré funcionará. Tratar de aplanarlo en una línea requiere que trate el {
como si fuera un comando (seguido de un espacio, por ejemplo) y que también trate el }
como si fuera un comando. Debe tener un terminador de comando antes del }
: utilicé una nueva línea, pero un &
para el fondo o ;
funcionaria tambien
Así:
{ command1; command2; } >/some/file
{ command1 & command2 & } >/some/file
Tampoco he abordado la cuestión de por qué tiene dos operaciones tail -f
separadas ejecutándose en un solo archivo remoto y por qué no está usando awk
power como super- grep
para manejar todo en uno, solo he tratado la superficie cuestión de cómo redireccionar la E / S de los dos comandos a un archivo.