
Wie kann ich pro Benutzer eine permanente Umgebungsvariable unabhängig von der verwendeten Shell ( bash
, zsh
und fish
) setzen?
Antwort1
EDIT: lautWas ist die beste Distributions-/Shell-unabhängige Methode zum Festlegen von Umgebungsvariablen?Die beste Lösung hierfür ist~/.pam_environment
BEARBEITEN: bin zur Hack-Lösung zurückgekehrt, da ~/.profile
es nicht von allen Shells gelesen wird:
Quelle aller Shells /etc/profile
.
Das bedeutet /etc/profile
, dass Sie in eine Zeile wie diese einfügen könnten
. $HOME/.custom-profile
~/.custom-profile
Dann könnten Sie Ihre Variablen für jeden Benutzer hinzufügen
Antwort2
Alle Shells lesen unterschiedliche Profildateien für jeden Benutzer (zsh: ~/.profile, bash: ~/.bash_profile, csh hat nur eine RC-Datei usw.). Sie müssten also alle diese potenziellen Kandidaten ändern.
Die meisten Shells greifen jedoch zumindest auf das Lesen von ~/.profile zurück (danke @terdon für den Hinweis!), sodass Sie Ihre Exporte dort ablegen können.
Da das „Anmelden“ normalerweise von einem Prozess durchgeführt wird, der seine UID und GID ändern kann (normalerweise ein als Root ausgeführter Anmeldemanager), liegt es an diesen Programmen, die Umgebung für das gestartete Programm zu definieren (z. B. eine Shell).
Aber: Es gibt mehr als einen Login-Manager (Ihren GDM/lightdm/KDM/... visuellen Login-Manager, getty, logind/loginct, ssh, getty...), und sie lesen die Konfiguration aus unterschiedlichen Dateien, sodass es auch hier keine einheitliche Möglichkeit gibt.