Eine weitere Option, die verhindert, dass das Zeug zurück und dann wieder zurück geleitet wird, /dev/zero
ist
sudo command | sudo dd of=FILENAME
Ich verwende | sudo tee FILENAME
, um schreiben oder an eine Datei anhängen zu können, für die sehr häufig Superuser-Berechtigungen erforderlich sind.
Obwohl ich verstehe, warum es in manchen Situationen hilfreich ist, das tee
auch seine Eingaben erneut an STDOUT sendet, habe ich diesen Teil nie wirklich tee
für etwas Nützliches verwendet. In den meisten Situationen führt dieses Feature nur dazu, dass mein Bildschirm mit unerwünschtem Jitter gefüllt wird, wenn ich den zusätzlichen Schritt nicht mehr mache und ihn manuell stummschalte tee 1> /dev/null
.
Meine Frage: Gibt es einen Befehl, der genau dasselbe macht wie tee
, aber standardmäßig nichts an STDOUT ausgibt?
Eine weitere Option, die verhindert, dass das Zeug zurück und dann wieder zurück geleitet wird, /dev/zero
ist
sudo command | sudo dd of=FILENAME
Die dd
Lösung druckt immer noch Junk zu stdout:
$ 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
Das kann mit der status
Option vermieden werden :
command | sudo dd status=none of=FILENAME
Eine weitere interessante Möglichkeit (für Linux sowieso):
command | sudo cp /dev/stdin FILENAME
Um eine TTY-Eingabe in eine Datei zu kopieren, mache ich häufig Folgendes:
sudo cp /dev/tty FILENAME
Es ist schade, dass tee keine Option hat, um stdout zu unterdrücken.
Sie könnten ein Skript verwenden. Dh setzen so etwas wie dies in dh $HOME/bin/stee
, 0tee
oder ähnlich:
#!/bin/bash argv= while [[ "$1" =~ ^- ]]; do argv+=" $1" shift done sudo tee $argv "$1" > /dev/null
#!/bin/bash sudo tee "$@" > /dev/null
Mach es ausführbar:
$ chmod 755 stee
Jetzt mache:
$ ls -la | stee -a / root / foo
Sie können Ihr gesamtes Kommando in sudo umschließen, sodass die Shell selbst sowie Umleitungen wie folgt ausgeführt werden root
:
sudo sh -c 'do_something > FILENAME'
Es gibt nicht direkt ein Programm, das das tun kann (dies ist so ziemlich das einzige Mal, dass es nützlich wäre), aber Sie könnten leicht Ihr eigenes schreiben. Wenn Sie nicht programmieren möchten, können Sie auch ein einfaches Shell - Skript schreiben, die die gleiche Sache tut: cat > $1
. Dies unterscheidet sich von der Inline-Einstellung (wie von Sägemehl vorgeschlagen), da das Sudo für das gesamte Skript gilt, einschließlich der Umleitung.
Ich weiß, ist etwas zu spät, aber was ich in solchen Fällen mache (wenn ein 'flacher' stdout aber auch eine temporäre Datei benötigt wird) ist:
tee whatever | grep -v ""