Wie verstecke ich die Terminal-Ausgabe, wenn ich einen Befehl ausführe?

62

Wenn ich bestimmte Programme wie Eclipse und Document Viewer in 11.10 über die Befehlszeile starte, werden eine Menge Informationen ausgegeben, die nicht von Belang zu sein scheinen.

Auch wenn sie im Hintergrund ausgeführt werden, werden sie manchmal weiterhin auf dem Terminal ausgegeben, an dem ich gerade arbeite, was irritierend ist.

Ich würde sie gerne einfach starten und das Hintergrundmaterial im Hintergrund behalten. Wenn Sie diese Programme über die Benutzeroberfläche starten (z. B. durch Doppelklicken auf ein Symbol), werden mir diese Meldungen nie angezeigt, sodass ich sie in der Befehlszeile nicht benötige.

Anake
quelle

Antworten:

81

Wenn Sie vermeiden können, etwas in die Konsole zu schreiben, hängt dies davon ab, wie die Ausgabe des Programms erstellt wird. Wenn es auf Standardausgabe gestreamt wird, ist es gerade genug zu tun

$ eclipse >/dev/null

und es sollte keine Ausgabe erfolgen.

So unterdrücken Sie auch Fehlermeldungen:

$ eclipse >/dev/null 2>&1

Oder einfach in Bash:

$ eclipse &>/dev/null

Aber wenn sie es irgendwie anders machen, könnte es ein Problem sein, zu verhindern, dass es in die Konsole geschrieben wird.

Verwenden Sie nach Möglichkeit die von MuffinStateWide angegebene Lösung

Elend
quelle
2
Könnte das machen wollen, eclipse 2&>1 >/dev/nullum loszuwerden stderr. Der Standard leitet nur weiter stdout. Und es gibt keine "andere" Möglichkeit, dies zu tun. Wenn Sie sowohl stdout als auch stderr in den Nether spülen, wird keine Ausgabe erfolgen.
TC1
@ TC1 Grundsätzlich könnte ein Programm / dev / tty erneut öffnen und die Ausgabe dort ausdrucken. In der Praxis werden GUI-Programme das nicht tun.
Random832
@ Random832 Naja, im Prinzip würde ich vorschlagen, dieses stderr nach / dev / dsp oder aplay für extra lulz zu leiten ... :) Aber du hast recht, theoretisch könnte es in der Praxis gemacht werden - ich würde es wahrscheinlich tun Schreibe wenigstens eine ziemlich unhöfliche E-Mail an den, der das getan hat.
TC1
5
@ TC1 "2> & 1> / dev / null" leitet stdout zum Bit-Bucket um, stderr wird jedoch nicht umgeleitet. Sie müssen die Reihenfolge umkehren und Folgendes tun: "> / dev / null 2> & 1"
William Pursell
9
Sie können auch einfach einmal: eclipse &> /dev/null. Das bringt sowohl stdin als auch stderr zum Umleitungspunkt (in bash)
warren
12

Sie können eine Bash-Funktion erstellen, die einen Aliasnamen für einen Befehl enthält, und zusätzliche Funktionen hinzufügen, um die gewünschten Ergebnisse zu erzielen.

Beispiel: Nehmen wir an, Sie möchten gvimeinen GUI-Texteditor über die Befehlszeile starten .

Sie könnten eine Funktion wie diese schreiben:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(Fügen Sie diese Funktion zu Ihrer .bashrcoder Ihrer .bash_aliasesDatei hinzu, damit sie immer geladen ist.)

Erläuterung:

  • Dies wird den gvimBefehl mit einer Bash-Funktion aliasen, die auch als Bash-Funktion bezeichnet wird gvim(wenn Sie also gviman einer Bash-Eingabeaufforderung eingeben, ruft sie Ihre gvimFunktion auf, anstatt den realen gvimBefehl auszuführen . Ihre Funktion ruft dann den realen gvimBefehl mit auf (und akzeptiert seine regulären Argumente) Einige zusätzliche Funktionen:

    • leitet stdout und stderr weiter zu /dev/null(unterdrückt die Ausgabe an das Terminal)
    • wird verwendet &, um den Befehl im Hintergrund auszuführen (damit Ihre Shell nicht blockiert wird)
    • nutzt disownden Hintergrundjob aus der Schale zu entfernen (so wird es in der Liste der aktiven Aufträge nicht angezeigt)
    • wird verwendet nohup, um den Prozess vom Terminal zu trennen (sodass Sie Ihre Shell-Sitzung beenden oder das Terminal schließen können, ohne den Prozess zu beenden).
Corey Goldberg
quelle
Übrigens, ich denke, dies ist eine umfassendere Lösung als die akzeptierte Antwort von @ Misery
Corey Goldberg
6

Versuchen Sie, --help als Befehlsschalter hinzuzufügen, und suchen Sie nach "quiet". Dies sollte die Ausgabe unterdrücken oder einfach über die GUI starten. und starten Sie mit dem Schalter oder finden Sie einen Weg, um es per Skript zu unterdrücken

persönlich starte ich von cli, um diese Ausgabe zu erhalten, also bin ich mir nicht sicher, ob es für alle GUI-Apps möglich ist.

MuffinStateWide
quelle