2010-05-17 4 views
5

Dans un environnement Unix, je veux utiliser tee sur une chaîne de commandes comme ceci:et tee - chaîne de commandes

$ echo 1; echo 2 | tee file 
1 
2 

$ cat file 
2 

Pourquoi ne file fin que comme ayant la sortie de la dernière commande? Pour les besoins de cette discussion, supposons que je ne puisse pas les séparer et exécuter les commandes séparément.

+0

En plus de créer un sous-shell explicite , vous pouvez utiliser '{echo 1; écho 2; } | tee fichier' pour obtenir la sortie dans un fichier. Notez que '{' doit être séparé de la commande par un espace, et '}' doit apparaître là où une commande pourrait apparaître (donc c'est après le second point-virgule). L'autre alternative est toujours de créer un nouveau script contenant les deux commandes indivisibles et d'en rediriger la sortie vers 'tee':' conjoined-twin-processes | fichier tee'. –

Répondre

4

Essayez:

(echo 1; echo 2) | tee file 

Sans les parenthèses, il devient analysé comme:

echo 1 ; (echo 2 | tee file) 
5

Il n'a que la sortie de la deuxième commande, car le point-virgule indique une nouvelle instruction au shell.

Il suffit de les mettre en parenthèses:

(echo 1; echo 2) | tee file 
Questions connexes