de.phhsnews.com


de.phhsnews.com / Wie führst du einen Befehl im Hintergrund ohne Ausgabe, es sei denn, es gibt einen Fehler?

Wie führst du einen Befehl im Hintergrund ohne Ausgabe, es sei denn, es gibt einen Fehler?


Wenn Sie eine beschäftigte Person sind, dann ist das Letzte, was Sie brauchen, mit einem riesigen belästigt zu werden Menge an "nutzlosen" Benachrichtigungen, also wie beruhigt man die Dinge? Der heutige SuperUser F & A Beitrag hat einige gute Antworten, um einem Leser zu helfen, die Menge an Ausgaben zu beruhigen.

Die heutige Frage & Antwort Sitzung kommt uns dank SuperUser - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A Webseiten.

Die Frage

SuperUser reader Xster möchte wissen, wie man einen Befehl im Hintergrund ohne Ausgabe ausführt, es sei denn, es gibt einen Fehler:

Wie unterdrückt man die Ausgabe eines Befehls, sondern zeigt sie beim Beenden des Befehls an ein Fehler?

Wie erhalten Sie einen Befehl, der ohne Ausgabe im Hintergrund ohne Ausgabe ausgeführt wird?

Die Antwort

SuperUser-Mitwirkende Bob und Maximillian Laumeister haben die Antwort für uns. Zuerst, Bob:

Leider ist die Annahme, dass stderr nur für die Fehlerausgabe verwendet wird, nicht immer korrekt. Stattdessen wird stderr oft für alle interaktiven Ausgaben und Diagnosen verwendet (dh die Ausgabe soll vom Benutzer in einer interaktiven Eingabeaufforderung gelesen werden). (1) wget und dd sind wohlbekannte Beispiele.

Einige Befehle bieten ein Flag (zB -quiet oder -silent ), um eine Ausgabe ohne Fehler zu unterdrücken. Lesen Sie ihre man-Seiten, um zu sehen, ob eine existiert.

Eine andere Konvention, die öfter hält, ist der Exit-Code , ein Programm gibt beim Beenden einen Exit-Code zurück. In der Regel (2) zeigt ein Exit-Code 0 Erfolg an, und jeder andere Exit-Code zeigt einen Fehler an.

Mit bash können Sie die Exit-Code des letzten Befehls aus der Variablen $? . Verwenden Sie in Fisch die Variable $ status . Sie können stderr in eine temporäre Datei pipen und sie nur ausdrucken, wenn ein Fehler auftritt. Zum Beispiel ( Fisch ):

Sie können auch einige Abkürzungen verwenden, wenn Sie keine Befehle verketten:

Oder:

Sie können auch stdout pipen puffern mit 2> & 1> / tmp / ausgabepuffer .

( Hinweis: Ich weiß eigentlich nicht Fisch , also passe ich das Konzept an was ich in der Dokumentation finden kann.Die Syntax könnte etwas falsch sein.Sie können auch mktemp verwenden, um eine eindeutige temporäre Datei zu erzeugen.Führen Sie sie aus und notieren Sie den Dateinamen in einer Variablen.)

If Sie müssen das Ganze im Hintergrund einer Shell ausführen, die Sie auch gleichzeitig interaktiv verwenden. Dann schreiben Sie am besten ein Skript, um die Ausgabe zu bearbeiten und dieses Skript im Hintergrund mit den Standardtechniken zu verstecken ( Fisch ). Hey, du kannst etwas wie die folgende Funktion in ~ / .config / fish / config.fish :

setzen Mit run-silent somecommand & (wobei das folgende ist) > & bewirkt, dass es im Hintergrund läuft)

Beachten Sie, dass dies den ursprünglichen Exit-Code schluckt und sowohl stdout als auch stderr im Fall von a ausgibt Fehler. Sie können sie bei Bedarf anpassen.

(1) Es gibt keine Garantie, dass die Fehlerausgabe nicht auf stdout erscheint, einige Programme werden dort alle Ausgaben ausgeben!

(2) Leider ist das immer noch nicht der Fall. Der Beendigungscode wird vollständig vom Programm gesteuert, und einige geben einige Erfolgsbedingungen mit Nicht-Null-Exits an. Nochmals, schauen Sie sich das Handbuch an.

Gefolgt von der Antwort von Maximilian LAUMEISTER:

Unix-Dienstprogramme senden allgemeine Nachrichten an stdout und Fehlermeldungen an stderr , wenn wir nur wollen Fehlermeldungen sehen, dann reicht es aus, stdout zu unterdrücken, damit nur stderr an die Konsole ausgegeben wird.

Die Vorgehensweise (in beiden bash und fish ) soll / dev / null an den Befehl angehängt werden. Dies führt stdout ins Nichts, aber stderr (mit Ihren Fehlermeldungen) kommt immer noch zur Konsole.

Also zum Beispiel:

Der Befehl echo 1 > / dev / null druckt nichts, weil das normale stdout Ausgabe wird unterdrückt, und nichts wurde in stderr geschrieben.

Der Befehl man doesnotexist> / dev / null gibt eine Fehlermeldung aus, weil man schreibt seine Fehlermeldung an stderr .


Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.


So fügen Sie Ihrem Laptop einen zusätzlichen Monitor hinzu

So fügen Sie Ihrem Laptop einen zusätzlichen Monitor hinzu

Multi-Monitor-Setups auf Desktop-Computern sind ziemlich einfach: Wenn Sie die Ports und die entsprechenden Kabel haben, sind Sie im Geschäft. Das Hinzufügen von zusätzlicher Bildschirmfläche zu Ihrem Laptop kann jedoch ein wenig komplizierter sein. Lesen Sie weiter, wenn wir Ihnen zeigen, wie Sie auf Ihrem Laptop eine zusätzliche Bildschirmfläche genießen können, unabhängig von Ihrer Port-Situation und mit einer Vielzahl sekundärer Bildschirme, einschließlich der Wiederverwendung alter Monitore, Tablets oder sogar eines tragbaren USB-gesteuerten Displays.

(how-to)

Automatisches Synchronisieren von Kontakten zwischen Outlook und Google Mail

Automatisches Synchronisieren von Kontakten zwischen Outlook und Google Mail

Outlook und Gmail verfügen über separate Adressbücher. Sie synchronisieren nicht, was bedeutet, dass wenn Sie Ihre Kontakte in der einen oder anderen ändern, dann haben Sie ein Adressbuch, das unverändert bleibt. So können Sie Ihre Adressbücher mit kostenloser Open-Source-Software synchronisieren: Es ist wirklich einfach, Ihre Kontakte zu exportieren und zu importieren, entweder von Google Mail nach Outlook oder umgekehrt.

(how-to)