2010-05-17 15 views
5

In un ambiente Unix, voglio usare tee su una catena di comandi in questo modo:Unix e tee - catena di comandi

$ echo 1; echo 2 | tee file 
1 
2 

$ cat file 
2 

Perché file finiscono solo fino ad avere l'output del comando finale?

Ai fini di questa discussione, supponiamo che non sia possibile separarli ed eseguire i comandi separatamente.

+0

Così come la creazione di un sub-shell esplicito , puoi usare '{echo 1; echo 2; } | tee file' per ottenere l'output in un file. Si noti che '{deve essere separato dal comando da uno spazio, e'} 'deve apparire dove potrebbe apparire un comando (quindi è dopo il secondo punto e virgola). L'altra alternativa è sempre quella di creare un nuovo script contenente i due comandi indivisibili e convogliare l'output di quello in 'tee':' conjoined-twin-processes | tee file'. –

risposta

4

Prova:

(echo 1; echo 2) | tee file 

Senza le parentesi, si sta facendo analizzato come:

echo 1 ; (echo 2 | tee file) 
5

Ha solo l'output del secondo comando, poiché il punto e virgola indica una nuova istruzione per la shell.

Basta metterli in parentesi:

(echo 1; echo 2) | tee file 
Problemi correlati