Pourquoi est - ce que presque toutes les instructions concernant l' ajout de texte aux fichiers système comme fstab
et /etc/apt/sources.list.d/<name>.list
impliquer l' utilisation tee
et echo
à ajouter du texte dit?
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
Courir diff -u file1 file2
ne renvoie rien; en cours d'exécution md5sum file1 file2
montre leurs sommes de contrôle sont identiques, ce qui me ramène à ma question initiale:
Pourquoi la | tee <FILENAME>
prévalence est-elle si répandue dans la documentation Ubuntu? S'agit-il d'une bonne pratique? Autrement, ne serait-il pas plus simple d'utiliser simplement l'exemple 2 au lieu de transmettre le résultat echo
à tee
?
command-line
tee
Alexej Magura
la source
la source
Réponses:
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:
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 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:
Mais avec le tee, tout ira bien:
2 exemples de ce site . Il y en a plus.
la source
sudo
sanstee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, tout devient brouillonecho "some text" | tee file1 file2 ... fileN
et> /dev/null
éventuellement ajouter , si vous ne voulez pas de fouillis sur la sortie standard.tee
prend le flux d'entrée standard et l'écrit à la fois dans le flux de sortie standard et 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 bon article sur Wikipedia où j'ai appris l'origine du nom de la commande.la source
Tout d’abord,
tee
elle-même n’ajoute pas de texte, pas plus>
.C'est
tee -a
et son complément,>>
que le texte est annexé.Je ne crois pas que tous les obus prennent en charge la
>>
fonction, c'est pourquoitee
on l'utilise plus couramment. (Pensez à tout simplement vieuxsh
). Tee est une commande, tandis que>>
est un opérateur.Si vous utilisez (mon préféré)
bash
,>
et>>
sont beaucoup plus gentil / facile.Utiliser
tee
vous permet également de lancer JUSTE cette commande afin de ne pas avoir à exécuter la totalité de la déclaration, comme danssudo sh -c "echo foo > bar"
.tee
vous permet également de scinder la sortie. Bien sûr, tout cela peut être vu dansman tee
. C'est principalement juste votre préférence personnelle.Pour plus de lecture, voir ici et ici .
la source
sudo somecommand >> filea
se déroulerasudo somecommand
puis, comme l' invocation utilisateur, append la sortiefilea
. Utiliser dessudo sh -c "somecommand >> filea"
œuvres, mais peut causer des cauchemars imbriqués. Utilisationsomecommand | sudo tee -a filea
s’exécute ensomecommand
tant qu’utilisateur invoquant, puis ajoute le résultat enfilea
tant qu’utilisateur root - ce qui correspond généralement à ce que l’utilisateur souhaitait.