Warum mögen fstab
und /etc/apt/sources.list.d/<name>.list
beinhalten fast alle Anweisungen zum Anhängen von Text an Systemdateien die Verwendung tee
und echo
das Anhängen von besagtem Text?
Nehmen Sie die folgenden Beispiele, die als root ausgeführt werden :
## 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
Laufen diff -u file1 file2
bringt nichts zurück; Laufen md5sum file1 file2
zeigt, dass ihre Prüfsummen identisch sind, was mich zu meiner ursprünglichen Frage zurückbringt:
Warum ist das bei | tee <FILENAME>
Ubuntu-Dokumenten so verbreitet, ist es nur eine gute Übung, sonst wäre es nicht einfacher, nur Beispiel 2 zu verwenden, anstatt die Ausgabe von an echo
zu übergeben tee
?
command-line
tee
Alexej Magura
quelle
quelle
Antworten:
Es gibt einen Unterschied: tee dupliziert die Ausgabe: Es sendet sie sowohl an die Datei als auch an die Anzeige.
Aber es gibt noch mehr:
Wenn Sie beispielsweise eine Zeichenfolge gleichzeitig in zwei Dateien schreiben möchten, können Sie den folgenden Befehl mit tee verwenden:
Eine andere Sache, die Ihnen helfen kann, ist die Vermeidung eines Problems bei der Verwendung von sudo. Der normale Ausgabeumleitungsoperator wird immer mit Ihren Benutzerrechten ausgeführt, auch wenn Sie ein sudo vor den Befehl schreiben, der den STDOUT-Text generiert. Mit anderen Worten, dies schlägt fehl, wenn Sie nicht berechtigt sind, in diese Datei zu schreiben:
Aber mit Tee wird alles gut gehen:
2 Beispiele von dieser Seite . Es hat noch mehr.
quelle
sudo
ohnetee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, wird die Sache chaotischecho "some text" | tee file1 file2 ... fileN
und vielleicht anhängen> /dev/null
, wenn Sie keine Unordnung auf stdout wollen.tee
Nimmt den Standardeingabestream und schreibt ihn sowohl in den Standardausgabestream als auch in einen Dateistream. Wenn es den Menschen hilft, sich zu erinnern, stammt der Befehlsname von einem T-Verteiler in der Rohrleitung. Es gibt einen schönen Wikipedia-Artikel, in dem ich über die Herkunft des Befehlsnamens informiert wurde.quelle
Erstens
tee
hängt er selbst keinen Text an und tut es auch nicht>
.Es ist
tee -a
und seine Ergänzung,>>
dass ANHÄNGE Text.Ich glaube nicht, dass alle Shells diese
>>
Funktion unterstützen. Deshalbtee
wird sie häufiger verwendet. (Denken Sie nur an einfach altsh
). Tee ist ein Befehl, während>>
ein Operator ist.Wenn Sie (mein persönlicher Favorit) verwenden
bash
,>
und>>
sind viel schöner / einfacher.Mit
tee
können Sie auch JUST diesen Befehl sudo, so dass Sie nicht die gesamte Anweisung sudo, wie insudo sh -c "echo foo > bar"
.tee
Außerdem können Sie die Ausgabe aufteilen. Das alles kann man natürlich in sehenman tee
. Es ist hauptsächlich nur Ihre persönliche Präferenz.Weitere Informationen finden Sie hier und hier .
quelle
sudo somecommand >> filea
ausführen , fügen Siesudo somecommand
als aufrufender Benutzer die Ausgabe anfilea
. Die Verwendung vonsudo sh -c "somecommand >> filea"
Works kann jedoch Albträume verursachen, die sich auf verschachtelte Anführungszeichen beziehen. Mitsomecommand | sudo tee -a filea
läuftsomecommand
wie der aufrufende Benutzer, und fügt dann die Ausgabefilea
als root - die in der Regel ist das, was der Benutzer wollte.