Gibt es eine Idee, warum ich nicht eine bestimmte Umgebungsvariable in meiner Eingabeaufforderung sehen kann?

296
mcdoh

Ich möchte den Namen meiner Python-Virtualenv in meiner ZSH-Eingabeaufforderung auflisten, er kann jedoch nicht funktionieren. Sie wird als Umgebungsvariable (VIRTUAL_ENV) aufgeführt. Ich habe ein anderes Skript eingerichtet, das nur den Basisnamen meiner virtuellen Umgebung (envTest) zurückgibt, aber der Versuch, dies in meine Eingabeaufforderung zu integrieren, funktionierte ebenfalls nicht.

Eingabeaufforderung config:

PROMPT="╭─$ $ [$] $ $ ╰─%B$%b " 

Konsole:

╭─user@server ~/Projects/virtualenvTest [] ╰─$ echo $VIRTUAL_ENV  ╭─user@server ~/Projects/virtualenvTest [] ╰─$ source envTest/bin/activate ╭─user@server ~/Projects/virtualenvTest [] ╰─$ echo $VIRTUAL_ENV /home/user/Projects/virtualenvTest/envTest 

Ich kann andere Umgebungsvariablen erhalten, die in meinem Prompt angezeigt werden (z. B. LANG).

Eingabeaufforderung config:

PROMPT="╭─$ $ [$] $ $ ╰─%B$%b " 

Konsole:

╭─user@server ~/Projects/virtualenvTest [en_US.UTF-8] ╰─$ echo $LANG en_US.UTF-8 
1

1 Antwort auf die Frage

1
Adaephon

Wenn Sie bei der Definition Ihrer Anführungszeichen tatsächlich doppelte Anführungszeichen verwenden, werden PROMPTalle darin enthaltenen Parameter durch die Definition ersetzt und nicht jedes Mal, wenn die Aufforderung gedruckt wird. Sie können dies verhindern, indem Sie $VIRTUAL_ENVanders zitieren .

Da die ganze prompt in einfache Anführungszeichen setzen Substitution zu verhindern, $VIRTUAL_ENVwahrscheinlich den Rest der Eingabeaufforderung brechen, versuchen Sie einfach die zitierte $durch das Voranstellen ein \, wie diese

PROMPT="╭─$ $ [\$] $ $ ╰─%B$%b " 

Ich vermute, dass die anderen Parameter funktionieren, weil sie durch etwas ersetzt werden, das dann jedes Mal ausgewertet wird. Zum Beispiel $wird wahrscheinlich durch etwas ersetzt, das zumindest die Eingabeaufforderung enthält, %nund %mmit einem @dazwischen.

$ funktioniert, weil er bereits den erwarteten Wert enthält, wenn Sie die Eingabeaufforderung festlegen.

Sie können dies leicht überprüfen, indem Sie Folgendes ausführen:

echo $PROMPT