Ich verwende es, | sudo tee FILENAME
um in eine Datei schreiben oder Inhalte anhängen zu können, für die recht häufig Superuser-Berechtigungen erforderlich sind.
Obwohl ich verstehe, warum es in manchen Situationen hilfreich ist, dass es tee
seine Eingabe auch wieder an STDOUT sendet, habe ich diesen Teil von nie wirklich tee
für etwas Nützliches verwendet. In den meisten Situationen führt diese Funktion nur dazu, dass mein Bildschirm mit unerwünschtem Zittern gefüllt ist, wenn ich nicht den zusätzlichen Schritt gehe und es manuell mit stummschalte tee 1> /dev/null
.
Meine Frage: Gibt es einen Befehl, der genau dasselbe macht wie tee
, aber standardmäßig nichts an STDOUT ausgibt?
Antwort1
Eine weitere Möglichkeit, die das Hin- und Herleiten des Materials vermeidet, /dev/zero
ist
sudo command | sudo dd of=FILENAME
Antwort2
Die dd
Lösung druckt immer noch Datenmüll auf stderr:
$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s
Dies kann mit der folgenden status
Option vermieden werden:
command | sudo dd status=none of=FILENAME
Eine weitere interessante Möglichkeit (jedenfalls für Linux):
command | sudo cp /dev/stdin FILENAME
Um TTY-Eingaben in eine Datei zu kopieren, mache ich oft Folgendes:
sudo cp /dev/tty FILENAME
Es ist schade, dass es bei tee keine Option zur Unterdrückung von stdout gibt.
Antwort3
Sie können ein Skript verwenden. Geben Sie beispielsweise Folgendes $HOME/bin/stee
oder 0tee
Ähnliches in den Internet Explorer ein:
#!/bin/bash
argv=
while [[ "$1" =~ ^- ]]; do
argv+=" $1"
shift
done
sudo tee $argv "$1" > /dev/null
#!/bin/bash
sudo tee "$@" > /dev/null
Machen Sie es ausführbar:
$ chmod 755 Stahl
Machen Sie jetzt zB:
$ ls -la | stee -a /root/foo
Antwort4
Sie können Ihren gesamten Befehl in sudo einschließen, sodass die Shell selbst sowie Weiterleitungen wie folgt ausgeführt werden root
:
sudo sh -c 'do_something > FILENAME'