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
?
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.
Tout d'abord, tee
lui-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 tee
est plus couramment utilisé. (Pensez à tout simplement vieux sh
name__). Tee est une commande, alors que >>
est un opérateur.
Si vous utilisez (mon préféré) bash
name__, >
et >>
sont beaucoup plus agréables/faciles.
Utiliser tee
vous permet également de lancer Sudo JUST pour que vous n'ayez pas à suivre toute l'instruction, comme dans Sudo sh -c "echo foo > bar"
. tee
vous 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.
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.