Ich habe ein Bash-Skript, mit dem eine Datei erstellt wird dd
. Das Problem ist, dass dd eine große Menge an Ausgaben ausgibt, die sich negativ auf die Ausgabe meines Skripts auswirken. Beim Durchsuchen habe ich eine Lösung gefunden:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Gibt es eine Alternative oder wird auf /dev/null
den einzigen Weg umgeleitet ?
/dev/null
- Sie arbeiten an Sudo, weil Sie Schreibzugriffdd
benötigen/dev/r$temp1
(nehme ich an). Sie müssen dies unabhängig davon tun, wie Sie diedd
Ausgabe unterdrücken . Umleiten der Ausgabe auf/dev/null
erfordert keine Rootcat
, verwenden Siehead
odertail
.Antworten:
Von der
dd(1)
Manpage:somit:
Dies gibt immer noch die
Müll beim
dd
Beenden, so dass die Umleitung zu einer Datensenke wirklich Ihre einzige Option ist.quelle
Hinzufügen
status=none
:Aus den dd (coreutils) 8.21-Dokumenten :
quelle
info page
; Die ursprüngliche Antwort hier hatte das genaue Zitat aus derman page
. Ich hätte direkt von derinfo
Seite kopiert / eingefügt, wenn dieman
Seite nicht eindeutig wäre, aber es liegt an Ihnen ... Übrigens, vielen Dank für Ihren weiteren Kommentar zu meiner Antwort zum Sortieren nach Wochentag.dd
ohnestatus=
)dd: invalid status flag: `none' Try `dd --help' for more information.
Zum späteren Nachschlagen:
Um die Ausgabe von dd vollständig zu unterdrücken, leiten Sie stderr wie folgt nach / dev / null um:
Dies funktioniert sehr gut, wenn Sie zum Beispiel den Prozess mit dem Befehl time in bash zeitlich festlegen und das Ergebnis einer Variablen zuweisen möchten, ohne die Ausgabe zu erhalten, die dd erzeugt.
Referenz: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
quelle
So etwas sollte auch für Sie mit den neuesten Versionen von BASH und ZSH funktionieren:
PS Dies ist nur ein Beispiel, das ich lief ...
quelle
Mit jeder Unix-Anwendung oder jedem Befehl können Sie alle Ausgaben mit unterdrücken
cmd >/dev/null 2>&1
Das erste Bit leitet die Standardausgabe (Einheitennummer 1) nach / dev / null um. Sie benötigen jedoch den zweiten Teil, um die Fehlerausgabe (Einheitennummer 2) AUCH an dieselbe Stelle wie Nummer 1 umzuleiten.
In UNIX ist STDIN = 0, STDOUT = 1 und STDERR = 2
quelle
stderr
hat der Dateideskriptor 2 . (Ich nehme an, "STDERR = 3" ist nur ein Tippfehler.)cmd 2>logfile.txt
scheint mehr angepasstWenn ich richtig verstehe, was Sie versuchen, setzen Sie diesen
sudo
Befehl in das Skript ein und erwarten, dass das Skript zur Eingabe Ihres Kennworts auffordert, wenn es dort ausgeführt wird? In diesem Fall tun Sie die Dinge nur auf komplizierte Weise.Eine sauberere Lösung besteht darin, das Skript wie gewohnt zu schreiben (dh ohne
sudo
) und es als Superuser auszuführen . Der Grund dafür ist, wenn das Skript Superuser-Zugriff benötigt, geben Sie ihm einfach den Zugriff (warum bis zu einem bestimmten Befehl warten?). Um im Skript zu überprüfen, ob es als root ausgeführt wird, gehen Sie wie folgt vor:quelle
sudo
das überhaupt? Normale Benutzer sollten in der Lage sein, Dinge in/dev/null
Ordnung umzuleiten .Sie können die Ausgabe in eine reguläre Datei umleiten, dh:
quelle