Aus dem Bash-Referenzhandbuch :
$
Wenn der
parameter
Wert null oder nicht gesetzt ist, wird die Erweiterungword
(oder eine entsprechende Nachricht, fallsword
nicht vorhanden) in den Standardfehler geschrieben, und die Shell wird beendet, wenn sie nicht interaktiv ist. Andernfalls wird der Wert vonparameter
ersetzt.
Es kann nicht offensichtlich sein, aber "Standardfehler" bedeutet hier den Standardfehler der Shell . Wenn Sie dies tun echo … 2> testfile
, leiten Sie den Standardfehler von um echo
. Beide landen normalerweise in Ihrem Terminal, sind aber nicht gleich.
Damit es funktioniert wie Sie möchten, erstellen Sie eine Subshell und leiten Sie ihren Standardfehler um:
(echo $) 2> testfile
Das wird auch funktionieren:
{ echo $; } 2> testfile
Beachten Sie, dass der tatsächliche Befehl ( echo
) den bereits umgeleiteten Standardfehler der Subshell übernimmt. Diese Umleitung wirkt sich also effektiv auf beide aus. Es ist fast nie wichtig, wann der Befehl ist, echo
aber mit einem Befehl, der eine Fehlermeldung zurückgibt, wird dies ausgeführt. Vergleichen Sie:
unset var (dd $) 2> testfile cat testfile var=foo (dd $) 2> testfile cat testfile