Wie verstecke ich die Ausgabe einer Shell-Anwendung unter Linux?

Antworten:

68

Sie können die Ausgabe eines Programms so umleiten, dass sie nicht angezeigt wird.

$ program > /dev/null

Dadurch wird die Standardausgabe umgeleitet. Es werden weiterhin Fehler angezeigt

$ program &> /dev/null

Dadurch werden alle Ausgaben, einschließlich der Fehler, umgeleitet.

theotherreceive
quelle
Der erste funktionierte nicht für wget
Jader Dias
Das liegt daran, dass wget stderr für einen Teil seiner Ausgabe verwendet. Der zweite sollte funktionieren.
theotherreceive
2
Im Übrigen möchten Sie diese wget-Ausgabe möglicherweise in einer Protokolldatei speichern. Wenn Ihr Download nicht mehr funktioniert, können Sie herausfinden, warum. Wenn es sowieso in einem Skript ist. Wenn dies ein einmaliger Lauf ist, dann ja, in den Müll
Matt Simmons
1
Für wgetSie können -qOptionen , um es ruhig zu machen.
pkhamre
Gibt es eine Möglichkeit, die direkt in / dev / tty geschriebene Ausgabe zu unterdrücken?
d11wtq
30

In der Befehlszeile stehen drei E / A-Geräte zur Verfügung.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Verwenden Sie, um Standardausgabe (die Standardausgabe) in eine Datei umzuleiten (und die Datei zu überschreiben)

 command > file.log 

Verwenden Sie zum Anhängen an file.log 2> s

 command >> file.log

Um Standardfehler in die Datei file.log umzuleiten, verwenden Sie

 command 2> file.log

und anhängen

 command 2>> file.log

Kombinieren Sie die Ausgaben zu einem Stream und senden Sie sie alle an einen Ort

 command > file.log 2>&1 

Dies sendet 2 (stderr) in 1 (stdout) und sendet stdout an file.log

Beachten Sie, dass es auch möglich ist, standard in in einen Befehl umzuleiten, der stdin erwartet

 command << file.txt 

BEARBEITEN
Weitere Informationen finden Sie im Advanced Bash Scripting Guide

Matt Simmons
quelle
Kann jemand erklären, wie das command > file.log 2>&1funktioniert?
Cory Klein
Wie tief würdest du gerne wissen?
Matt Simmons
3
@nomoreink: Es sind eigentlich 2 Befehle, einer ist > fileund der zweite ist 2>&1. Der erste leitet den Standard in eine Datei um. Der zweite nimmt den zweiten Dateideskriptor und leitet ihn zum ersten weiter. Sie können den umgekehrten Vorgang ausführen, indem Sie die Standardausgabe mit in den Standardfehler >&2umleiten und dann den Standardfehler mit in eine Datei umleiten 2> file.
Hubert Kario
12

Verbergen, verstecken stdout

./command >/dev/null

Verstecke stdoutundstderr

./command >/dev/null 2>&1

Terminal ausblenden stdoutund stderrfreigeben (Befehl im Hintergrund ausführen)

./command >/dev/null 2>&1 &
gummiartig
quelle
3

Wenn Sie die Ausgabe nur ausblenden (und nicht in einer Datei speichern) möchten, können Sie Folgendes verwenden:

Bearbeitet:

$ command &> / dev / null

Lucho
quelle
Dadurch wird die Ausgabe in eine Datei mit dem Namen null umgeleitet
theotherreceive
Es wurde eine Nulldatei generiert
Jader Dias
1
Sie hätten / dev / null nicht gemeint, oder?
Babu
1
Ja, hätte ich, Babu. Ich meinte $ command &> / dev / null. Ich entschuldige mich dafür, dass ich zu schnell zu meinem Besten getippt habe.
Lucho
2

Für Mac OS X (10.6 "Snow Leopard"):

Wenn Sie die Ausgabe ausblenden müssen, ohne das Programm darüber zu informieren, indem Sie den Ausgabe- / Fehlerdateideskriptor überprüfen, können Sie versuchen, Folgendes in einer Shell zu verwenden:

stty flusho; command ;stty -flusho

oder wenn du übrigens nur die eingabe vom terminal verbergen willst:

stty  -echo; command ;stty  echo

Weitere Informationen finden Sie in der stty (1) -Handbuchseite

Für Linux weiß ich nur, dass Ubunutu (10.04 "Lucid") und einige "Debian / Arch" (unten kommentiert - tnx hendry) diese flushoEinstellung nicht haben (und ich kann nichts anderes in der Manpage sehen). . Die echoEinstellung funktioniert auf dem Ubuntu trotzdem.

vike
quelle
Meine Standardeinstellung unter Debian / Arch hat diese Optionen nicht.
Hendry
Ich hätte natürlich erwähnen sollen, dass ich nicht einmal auf dem Betriebssystem des OP war. Hat meinen Beitrag bearbeitet.
Vike