Wie die anderen gesagt haben, bietet Linux zwei verschiedene Ausgabestreams:
Bei stdout oder "Standardausgabe" werden alle regulären Ausgaben ausgeführt.
Sie können mit dem Dateideskriptor darauf verweisen 1
.
stderr oder "Standardfehler" ist ein separater Stream für Out-of-Band-Informationen.
Sie können mit dem Dateideskriptor darauf verweisen 2
.
Warum zwei verschiedene Ausgabestreams? Betrachten Sie eine Pipeline imaginärer Befehle:
decrypt $MY_FILE | grep "secret" | sort > secrets.txt
Stellen Sie sich nun vor, der decrypt
Befehl schlägt fehl und generiert eine Fehlermeldung. Wenn es diese Nachricht an stdout
senden würde, würde es in die Pipe senden, und wenn es nicht das Wort "geheim" hätte, würden Sie es nie sehen. Sie erhalten also eine leere Ausgabedatei, ohne zu wissen, was schief gelaufen ist.
Da die Pipe jedoch nur erfasst stdout
, kann der decrypt
Befehl seine Fehler an die Stelle senden stderr
, an der sie auf der Konsole angezeigt werden.
Sie können umleiten stdout
und stderr
entweder zusammen oder unabhängig voneinander:
# Send errors to "errors.txt" and output to "secrets.txt"
# The following two lines are equivalent, as ">" means "1>"
decrypt $MY_FILE 2> errors.txt > secrets.txt
decrypt $MY_FILE 2> errors.txt 1> secrets.txt
Sie können die Fehler umleiten stdout
und so verarbeiten, als wären sie normale Ausgaben:
# The operation "2>&1" means "redirect file descriptor 2 to file
# descriptor 1. So this sends all output from stderr to stdout.
# Note that the order of redirection is important.
decrypt $MY_FILE > errors.txt 2>&1
# This may be confusing. It will store the normal output in a file
# and send error messages to stdout, where they'll be captured by
# the pipe and then sorted.
decrypt $MY_FILE 2>&1 > output.txt | sort
Sie können auch eine "Kurzschreibweise" verwenden, um sowohl stdout als auch stderr in dieselbe Datei umzuleiten :
decrypt $MY_FILE &> output.txt
Und schließlich der >
wird Bediener zunächst gestutzt seine Ausgabedatei vor dem Schreiben. Wenn Sie stattdessen Daten an eine vorhandene Datei anhängen möchten , verwenden Sie den >>
Operator:
decrypt $MY_FILE 2>> more_errors.txt >> more_secrets.txt
decrypt $MY_FILE >> more_output.txt 2>&1