66 votes

L'utilisation du tee a-t-elle un sens ?

Comment se fait-il que presque toutes les instructions concernant l'ajout de texte aux fichiers système tels que fstab y /etc/apt/sources.list.d/<name>.list impliquent l'utilisation tee et echo pour ajouter ledit texte ?

Prenons les exemples suivants, qui sont exécutés en tant que racine :

## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2

Running diff -u file1 file2 ne renvoie rien ; l'exécution de md5sum file1 file2 montre que leurs checksums sont identiques, ce qui me ramène à ma question initiale :

Pourquoi le | tee <FILENAME> si répandu dans la documentation Ubuntu, est-ce simplement une bonne pratique, sinon ne serait-il pas plus simple d'utiliser l'exemple 2 au lieu de passer la sortie de echo a tee ?

102voto

Rinzwind Points 270388

Il y a une différence : tee duplique la sortie : il l'envoie à la fois au fichier et à l'écran.

Mais il y a plus :

  • Par exemple, si vous voulez écrire une chaîne de caractères dans deux fichiers à la fois, la commande avec tee que vous pouvez utiliser est la suivante :

     echo "some text" | tee file1 > file2  
  • Une autre chose qui peut vous aider est d'éviter un problème lors de l'utilisation de sudo. L'opérateur normal de redirection de la sortie est toujours exécuté avec vos privilèges d'utilisateur, même lorsque vous écrivez un sudo devant la commande qui génère le texte STDOUT. En d'autres termes, cette opération échouera si vous n'avez pas la permission d'écrire dans ce fichier :

     sudo echo "something" > bar  

    Mais avec Tee, tout ira bien :

    echo "something" | sudo tee bar  

2 exemples de ce site . Il en a d'autres.

26voto

user391339 Points 1249

tee prend le flux d'entrée standard et l'écrit dans ambos le flux de sortie standard ainsi qu'un flux de fichier. Si cela peut aider les gens à se souvenir, le nom de la commande vient d'un diviseur en T en plomberie. Il existe un joli Article de Wikipedia où j'ai appris l'origine du nom de la commande.

enter image description here enter image description here

16voto

Kaz Wolfe Points 32777

Tout d'abord, tee lui-même n'ajoute pas de texte, pas plus que > .

Il est tee -a et son complément, >> qui APPLIQUE du texte.

Je ne crois pas que toutes les coquilles supportent le >> c'est pourquoi tee est plus couramment utilisé. (Pensez au bon vieux sh ). Tee est un ordre, tandis que >> est un opérateur.

Si vous utilisez (mon préféré) bash , > y >> sont beaucoup plus agréables et faciles à utiliser.

Utilisation de tee vous permet également de sudo JUST cette commande afin que vous n'ayez pas à sudo la déclaration entière, comme dans sudo sh -c "echo foo > bar" . tee vous permet également de diviser la sortie. Bien sûr, tout cela peut être vu dans man tee . Il s'agit principalement de votre préférence personnelle.

Pour plus d'informations, voir aquí y aquí .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X