![Warum funktioniert die E/A-Umleitung beim Beenden von Hintergrundjobs nicht?](https://rvso.com/image/122424/Warum%20funktioniert%20die%20E%2FA-Umleitung%20beim%20Beenden%20von%20Hintergrundjobs%20nicht%3F.png)
[~]$ 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>&1
zur Umleitung stderr
zu hinzu stdout
und verwende, > /dev/null
um 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.