Est-il important d'utiliser le tee?

35

Pourquoi presque toutes les instructions concernant l’ajout de texte aux fichiers système tels que fstab et /etc/apt/sources.list.d/<name>.list impliquent d’utiliser tee et echo pour texte?

Prenez les exemples suivants, qui sont exécutés en tant que root :

## 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

L'exécution de diff -u file1 file2 ne renvoie rien; En cours d'exécution, md5sum file1 file2 indique que leurs md5sum sont identiques, ce qui me ramène à ma question initiale:

Pourquoi le | tee <FILENAME> est-il si répandu dans les documents Ubuntu, est-ce juste une bonne pratique, sinon ne serait-il pas plus simple d'utiliser l'exemple 2 plutôt que de transmettre echo à tee ?

    
posée Alexej Magura 20.01.2014 - 19:37
la source

3 réponses

69

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

Mais il y a plus:

  • Par exemple, si vous souhaitez écrire une chaîne dans deux fichiers à la fois, la commande avec tee que vous pouvez utiliser est:

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

     sudo echo "something" > bar  
    

    Mais avec le tee, tout ira bien:

    echo "something" | sudo tee bar  
    

2 exemples de ce site . Il y en a plus.

    
réponse donnée Rinzwind 20.01.2014 - 19:48
la source
8

Tout d’abord, tee lui-même n’ajoute pas de texte, ni > .

Il s’agit de tee -a et de son complément, >> que le texte APPENDS.

Je ne crois pas que tous les shells prennent en charge la fonction >> , c'est pourquoi tee est plus couramment utilisé. (Pensez simplement au vieux sh ). Tee est une commande, tandis que >> est un opérateur.

Si vous utilisez (mon favori personnel) bash , > et >> sont beaucoup plus agréables / faciles.

L'utilisation de tee vous permet également d'exécuter JUSTE cette commande afin que vous n'ayez pas à afficher l'intégralité de l'instruction, 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 . C'est principalement juste votre préférence personnelle.

Pour en savoir plus, consultez ici et ici .

    
réponse donnée Kaz Wolfe 20.01.2014 - 19:43
la source
1

tee prend le flux d'entrée standard et l'écrit dans les deux le flux de sortie standard ainsi que dans un flux de fichiers. Si cela aide les gens à se souvenir, le nom de la commande provient d'un séparateur en T dans la plomberie. Il y a un bel article de Wikipedia où j'ai appris l'origine du nom de la commande.

    
réponse donnée user391339 01.03.2018 - 08:58
la source

Lire d'autres questions sur les étiquettes