web-dev-qa-db-fra.com

Y a-t-il une signification à utiliser le tee?

Pourquoi toutes les instructions relatives à l'ajout de texte aux fichiers système, telles que fstab et /etc/apt/sources.list.d/<name>.list, impliquent-elles d'utiliser tee et echo pour ajouter 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

Lancer diff -u file1 file2 ne renvoie rien; lancer md5sum file1 file2 montre que leurs sommes md5 sont identiques, ce qui me ramène à ma question initiale:

Pourquoi le | tee <FILENAME> est-il si courant dans les documents Ubuntu? S'agit-il d'une bonne pratique? Autrement, ne serait-il pas plus simple d'utiliser l'exemple 2 au lieu de passer le résultat de echo à tee?

41
Alexej Magura

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

Mais il y a plus:

  • Par exemple, si vous voulez écrire une chaîne 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 de redirection de sortie normal 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, 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 en a plus.

78
Rinzwind

Tout d'abord, teelui-même n'ajoute pas de texte, ni >.

C'est tee -a et son complément, >> qui APPEND le texte.

Je ne crois pas que tous les shells prennent en charge la fonction >>. C'est pourquoi teeest plus couramment utilisé. (Pensez à tout simplement vieux shname__). Tee est une commande, alors que >> est un opérateur.

Si vous utilisez (mon préféré) bashname__, > et >> sont beaucoup plus agréables/faciles.

Utiliser teevous permet également de lancer Sudo JUST pour que vous n'ayez pas à suivre toute l'instruction, comme dans Sudo sh -c "echo foo > bar". teevous permet également de fractionner 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, voir ici et ici .

9
Kaz Wolfe

tee prend le flux d'entrée standard et l'écrit dans à la fois 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 de la plomberie. Il y a un Nice article Wikipedia où j'ai appris l'origine du nom de la commande.

enter image description hereenter image description here

9
user391339