How to redirect stderr of $ syntax?

344
Amjad Abdullah

I am using bash and I am trying to print a message to standard error if a variable is not set with the following command:

echo $ 

Now, I want to redirect that error message to a file. I tried the following but it didn't work:

echo $ > testfile 

Nor the following worked:

echo $ 2> testfile 

So, how can I direct this generated message to a file?

0

1 Antwort auf die Frage

0
Kamil Maciorowski

Aus dem Bash-Referenzhandbuch :

$ 

Wenn der parameterWert null oder nicht gesetzt ist, wird die Erweiterung word(oder eine entsprechende Nachricht, falls wordnicht vorhanden) in den Standardfehler geschrieben, und die Shell wird beendet, wenn sie nicht interaktiv ist. Andernfalls wird der Wert von parameterersetzt.

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, echoaber 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