Das Lesen der Umgebungsvariablen im Befehlsalias bewirkt, dass sie ausgewertet wird.

610
chester89

Ich habe einen einfachen Alias ​​zum Schreiben in Protokolldateien (dies ist der Inhalt meiner .profile-Datei):

logtee() { $ tee -a $TEST_LOG_FOLDER/$1 } 

Ich lese den Ordner aus der Umgebungsvariablen (daher enthält diese Variable einen ähnlichen Wert wie 'd / my / logs'). Allerdings, wenn ich diesen Alias Versuchen Sie es mit durch Ausführen echo 'this is reading path from env.variable!' | logtee whatever.loges funktioniert, aber der Ausgang ist: sh.exe": /d/my/log/path: is a directory.
Habe ich etwas falsch gemacht? Warum wird die Umgebungsvariable beim Lesen ausgewertet? Ich vermute, es hat etwas mit der Tatsache zu tun, dass es sich um einen Alias ​​handelt, da in
normalem .sh-Skript ähnlicher Code ohne Probleme funktioniert. PS Ich verwende msysgit unter Windows 7. Ist das das Problem?

1
Was meinst du mit "es ist ein Alias"? Ich sehe hier kein Aliasing (haben Sie die Funktion in eines Ihrer Skripts exportiert; z. B. ".profile" oder ".bashrc" usw.). Warum haben Sie "sh.exe" in der Ausgabe? Laufen Sie unter Windows oder Linux? Und was ist schließlich die Ausgabe von `echo $ TEST_LOG_FOLDER '. jehad vor 7 Jahren 0
@Johad Es tut mir leid, dass ich nicht klar war - die Frage wurde aktualisiert chester89 vor 7 Jahren 0

1 Antwort auf die Frage

3
AFH

Die erste Zeile Ihrer Funktion wertet sie tatsächlich aus. Sie könnten es ersetzen durch:

echo $ > /dev/null 

Eine bessere Lösung wäre:

[ -d "$" ] && \ 

Die beste Lösung ist, keine separate Zeile zu verwenden, daher wird die gesamte Funktion zu:

logtee() { tee -a "$/$1" } 

Beachten Sie, dass ich das Zitat geändert habe, falls in $TEST_LOG_FOLDERoder ein Leerzeichen vorhanden ist $1.

ja, das habe ich vermisst. Vielen Dank chester89 vor 7 Jahren 0