GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum geht die Ausgabe einiger Linux-Programme weder an STDOUT noch an STDERR?

Diese Frage wird in BashFAQ/032 behandelt. In Ihrem Beispiel würden Sie:

{ time sleep 1; } 2> /dev/null

Der Grund warum

time sleep 1 2>/dev/null

sich nicht so verhält, wie Sie es erwarten, weil Sie mit dieser Syntax time möchten den Befehl sleep 1 2>/dev/null (Ja, der Befehl sleep 1 mit stderr umgeleitet zu /dev/null ). Die eingebaute time funktioniert so, dass dies tatsächlich möglich ist.

Die bash eingebaut kann dies tatsächlich tun, weil ... nun, es ist ein eingebautes. Ein solches Verhalten wäre mit dem externen Befehl time nicht möglich befindet sich normalerweise in /usr/bin . Tatsächlich:

$ /usr/bin/time sleep 1 2>/dev/null
$

Nun die Antwort auf Ihre Frage

Warum geht die Ausgabe einiger Linux-Programme weder zu STDOUT noch zu STDERR?

ist:es geht, die Ausgabe geht an stdout oder stderr .

Hoffe, das hilft!


Ihre spezielle Frage zu time builtin wurde beantwortet, aber es gibt einige Befehle, die auch nicht in stdout schreiben oder an stderr . Ein klassisches Beispiel ist der Unix-Befehl crypt . crypt ohne Argumente verschlüsselt die Standardeingabe stdin und schreibt es auf die Standardausgabe stdout . Es fordert den Benutzer mit getpass() zur Eingabe eines Passworts auf , die standardmäßig eine Eingabeaufforderung an /dev/tty ausgibt . /dev/tty ist das aktuelle Endgerät. Schreiben nach /dev/tty bewirkt, dass in das aktuelle Terminal geschrieben wird (falls vorhanden, siehe isatty() ).

Der Grund crypt kann nicht auf stdout schreiben liegt daran, dass es verschlüsselte Ausgaben in stdout schreibt . Außerdem ist es besser, zu /dev/tty aufzufordern anstatt in stderr zu schreiben damit, wenn ein Benutzer stdout umleitet und stderr , wird die Eingabeaufforderung immer noch angezeigt. (Aus dem gleichen Grund crypt kann das Passwort von stdin nicht lesen , da es zum Lesen der zu verschlüsselnden Daten verwendet wird.)


Linux
  1. Ausgabe nach Stdout und gleichzeitig Grep in eine Datei?

  2. Wie kann die Ausgabe des Zeitbefehls in eine Datei unter Linux umgeleitet werden?

  3. Warum interpretiert der C-Präprozessor das Wort Linux als Konstante 1?

  4. Was bedeutet das Linux-Pipe-Symbol | tun?

  5. Warum ist die Ausgabe von openssl passwd jedes Mal anders?

Überprüfen Sie die Zeitzone in Linux

Konfigurieren Sie die Shell, um Stderr und Stdout in verschiedenen Farben zu drucken?

Linux – Wie überprüft man die Verzeichnisstrukturinformationen einer Unix/Linux-Datei?

Warum beginnt die Unix-Zeit am 1.1.1970?

Linux – Warum behält Rsync unter Linux nicht alle Zeitstempel (Erstellungszeit) bei?

Verstehen des Zeitbefehls in Linux