Was bewirkt die Ausgabe nach /dev/null in Bash-Skripten?

Was bewirkt die Ausgabe nach /dev/null in Bash-Skripten?

Oft stoße ich auf kleine Bash-Skripte, die in if-Anweisungen folgende Syntax verwenden:

some command > /dev/null 2>&1

Was ist der Zweck einer /dev/nullsolchen Ausgabe und was bedeutet sie 2>&1?

Es scheint immer zu funktionieren, aber ich würde gerne wissen, was es macht.

Antwort1

>/dev/nullleitet die Standardausgabe des Befehls auf das Nullgerät um, ein spezielles Gerät, das die darauf geschriebenen Informationen verwirft

2>&1leitet den Standardfehlerstrom zum Standardausgabestrom um (stderr = 2, stdout = 1). Beachten Sie, dass dies den Standardfehlerstrom nimmt und ihn an dieselbe Stelle wie die Standardausgabe zu diesem Zeitpunkt verweist. Dies ist der Grund für die Reihenfolge, >/some/where 2>&1da man zuerst stdout irgendwohin verweisen muss undDannRichten Sie stderr auf die gleiche Stelle, wenn Sie am Ende beide Streams kombinieren möchten.

In der Praxis verhindert es, dass die Ausgabe des Befehls (sowohl stdout als auch stderr) angezeigt wird. Es wird verwendet, wenn Sie sich nicht für die Befehlsausgabe interessieren.

Antwort2

STDIN wird durch 0, STDOUT durch 1 und STDERR durch 2 dargestellt.

/dev/nullist der Bit-Bucket: der Ort, an dem Sie alles abladen, was Sie nicht brauchen.


Daher wird STDOUT zum Bit-Bucket (Papierkorb) umgeleitet und STDERR wird dorthin umgeleitet, wo sich STDOUT befindet: zum Bit-Bucket.


Sie können auch Folgendes tun:

>/dev/null 2>/dev/null

verwandte Informationen