Da Sie möchten, dass die Variable auch in Ihren Terminal-Shells ( interaktive Nicht-Login-Shell ) und für die Desktop-Launchersymbole (X-Server, der von einer nicht interaktiven Login-Shell gestartet wird ) definiert wird, sollten Sie die Definition in Ihre ~/.zshenv
.
Und ja, Sie müssen Ihre x-Sitzung erneut starten, damit die neue Umgebung für Ihre Desktopsymbole verfügbar ist. Stellen Sie sich ein solches Startschema vor: Graphical Login -> Use your default shell to start the X session -> Desktop -> Shell terminal / Launch program via icon
So erben die untergeordneten Shells die Umgebung von dem übergeordneten Element, das zum Starten der X-Sitzung verwendet wird. Diese Shell liest die RC-Dateien nur einmal - beim Anmelden an der X-Sitzung.
Für den Bonuspunkt . Das sagt das Handbuch:
export [ name[=value] ... ]
Die angegebenen Namen werden für den automatischen Export in die Umgebung der nachfolgend ausgeführten Befehle markiert. (...)
Wenn Sie Ihre Variable in definieren ~/.zshenv
, können Sie diese prinzipiell weglassen, export
da diese Datei standardmäßig eingelesen wird. Der einzige Unterschied entsteht, wenn Sie eine Shell mit starten zsh -f
, die keine RC-Dateien enthält. Eine kleine Demonstration:
% foo=foo_defined % export bar=bar_defined % print -l $foo $bar foo_defined bar_defined % zsh -f % print -l $foo $bar bar_defined %
I. e. Nur der Export $bar
wird in nachfolgenden Shells definiert. Aber auf der sicheren Seite, verwenden Sie export
- ich kann mir keinen Fall vorstellen, in dem dies schädlich ist.