Warum funktioniert die E/A-Umleitung beim Beenden von Hintergrundjobs nicht?

Warum funktioniert die E/A-Umleitung beim Beenden von Hintergrundjobs nicht?
[~]$ kill %123

bash: kill: %123: no such job

[~]$ kill %123 2>&1 > /dev/null

bash: kill: %123: no such job

Ich möchte die gesamte Ausgabe während des Beendens von Hintergrundjobs deaktivieren.

Die erste Ausgabe entspricht den Erwartungen. Die zweite Ausgabe hingegen nicht.

Wie in der Befehlszeile gezeigt, füge ich 2>&1zur Umleitung stderrzu hinzu stdoutund verwende, > /dev/nullum die gesamte Ausgabe auf ein Nullgerät umzuleiten. Die Ausgabe wird jedoch weiterhin auf dem Terminal angezeigt.

Irgendwelche Erklärungen?

Dank im Voraus.

Aktualisierte Information:

Der folgende Befehl funktioniert wie erwartet:

kill %123 > /dev/null 2>&1

Antwort1

Die Ausgabeumleitung ist eine Eigenschaft des Prozesses. Daher wird bei einer Umleitung mit 2>&1 dieaktuellAusgabe von stdout an stderr, das das aktuelle TTY ist, dann setzt das Folgende > stdout auf /dev/null, wodurch stderr auf das TTY gesetzt bleibt. In Ihren aktualisierten Informationen haben Sie zuerst stdout richtig gesetzt, sodass beide am Ende /dev/null sind.

verwandte Informationen