2010-05-17 13 views
5

En un entorno Unix, quiero usar tee en una cadena de comandos, así:Unix y camiseta - cadena de comandos

$ echo 1; echo 2 | tee file 
1 
2 

$ cat file 
2 

¿Por qué file sólo terminan por tener la salida de la última orden?

Para los propósitos de esta discusión, vamos a suponer que no puedo separarlos y ejecutar los comandos por separado.

+0

Así como la creación de una explícita sub-shell , puedes usar '{echo 1; echo 2; } | tee file' para obtener la salida en un archivo. Tenga en cuenta que '{' tiene que estar separado del comando por un espacio, y '}' debe aparecer donde podría aparecer un comando (por lo tanto, es después del segundo punto y coma). La otra alternativa es siempre crear una nueva secuencia de comandos que contenga los dos comandos indivisibles y canalizar la salida de eso a 'tee':' conjoined-twin-processes | archivo de tee'. –

Respuesta

4

Probar:

(echo 1; echo 2) | tee file 

Sin los paréntesis, se está haciendo analiza como:

echo 1 ; (echo 2 | tee file) 
5

Tiene sólo la salida de la segunda orden, como el punto y coma indica una nueva declaración a la cáscara.

Sólo hay que poner entre paréntesis:

(echo 1; echo 2) | tee file 
Cuestiones relacionadas