Wo werden Umgebungsvariablen deklariert?

59

Was sind die richtigen Orte für:

  1. Globale Umgebungsvariablen, die alle Benutzer betreffen sollen?
  2. Benutzerspezifische Umgebungsvariablen?
Ivan
quelle

Antworten:

16

Ich denke, die Community-Wiki-Seite zu Umgebungsvariablen wird Ihnen beim Aussortieren helfen

sagarchalisieren
quelle
2
Das Problem ist, dass das verknüpfte Dokument im Teil der benutzerdefinierten Variablen verwirrt und / oder falsch ist. Ich versuche immer noch einen muschelunabhängigen Weg zu finden. $ HOME / .profile ist wahrscheinlich die beste Wette ...
Rmano
16
Bitte fügen Sie Text ein oder machen Sie einen Schnappschuss des verlinkten Inhalts - er ist möglicherweise in Zukunft nicht mehr verfügbar!
Nam G VU
4
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Thomas Ward
75

Um die Antwort von sagarchalise zu ergänzen, kann ich zusammenfassen, was der Link als geeignete Orte für Einstellungen vorschlägt.

Für globale Einstellungen systemweite Umgebungsvariablen

  • Verwenden /etc/environment
  • Verwenden Sie nicht /etc/profileoder/etc/bash.bashrc

Von der Seite:

/etc/environment[...] ist speziell für systemweite Einstellungen von Umgebungsvariablen gedacht. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile. Insbesondere werden in dieser Datei die systemweiten Einstellungen für das Gebietsschema und den Pfad gespeichert.

Verwenden /etc/profileist ein sehr unixmäßiger Weg, aber seine Funktionalität ist unter Ubuntu stark eingeschränkt. Es existiert nur /etc/bash.bashrc, um auf Einträge zu verweisen und diese zu sammeln /etc/profile.d.

Auf meinem System ist der einzige interessante Eintrag in profile.d /etc/profile.d/bash_completion.sh.

Für lokale oder benutzerspezifische Einstellungen

Eine frühere Version der Ubuntu-Seite wird empfohlen ~/.pam_environment, aber die Seite schlägt derzeit vor, dass Sie verwenden sollten, wenn dies nicht funktioniert

  • ~/.profile - Dies ist wahrscheinlich die beste Datei zum Platzieren von Umgebungsvariablenzuweisungen, da sie automatisch vom DisplayManager während des Startvorgangs der Desktopsitzung sowie von der Anmeldeshell ausgeführt wird, wenn man sich über die Textkonsole anmeldet.

  • ~/.bash_profileoder ~./bash_login- Wenn eines davon existiert, führt bash es aus, anstatt ~/.profilewenn bash als Login-Shell gestartet wird. Bash werden es vorziehen , ~/.bash_profilezu ~/.bash_login. [...] Diese Dateien haben standardmäßig keinen Einfluss auf eine Grafiksitzung. "

  • ~/.bashrc - "... kann der einfachste Ort sein, um Variablen zu setzen".
belacqua
quelle
1
Welche Programme lesen /etc/environmentwann? Es scheint nicht mit Cron zu funktionieren, auch wenn es verwendet wirdSHELL=/bin/bash
SystemParadox
1
Es scheint, dass / etc / environment Teil von PAM ist, was bedeutet, dass es die Standardumgebung für alle Prozesse festlegen sollte. cron ist besonders (das heißt defekt), weil es diese Umgebung mit einer eigenen Umgebung überschreibt.
SystemParadox
Wie verhält sich .bashrc? nach bash_profile? anstelle von .profile?
öffnet
1
@opensas Sie sollten wahrscheinlich eine separate Frage stellen, die sich auf diese oder die Antwort bezieht.
Belacqua
@belacqua sagen wir, ich muss 2 oder mehr Umgebungsvariablen hinzufügen, um zu /etc/environmentmögen JAVA_HOME="/opt/java" und ANT_HOME="/opt/ant" wie es geht
Kasun Siyambalapitiya
7

Du hast:

/ etc / profile: Systemweite .profile-Datei für die Bourne-Shell (sh (1)) und die Bourne-kompatiblen Shells (bash (1), ksh (1), ash (1), ...).

die in Lucid und Maverick laufen

/etc/profile.d/*.sh

falls vorhanden und falls die Shell des Benutzers bash ist:

/etc/bash.bashrc

Für die Benutzerumgebung gibt es ein verwirrendes Array, das spezifisch für die Shell ist und angibt, ob sie als "Anmeldeshell" betrachtet wird. Wenn die Shell bash ist:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

für sh / dash:

$HOME/.profile

für zsh werde ich nicht einmal versuchen , dies zu verstehen .

msw
quelle
5

Wie auf https://help.ubuntu.com/community/EnvironmentVariables empfohlen :

  1. Globale Umgebungsvariablen, die alle Benutzer betreffen sollen, sollten berücksichtigt werden /etc/environment.

  2. Benutzerspezifische Umgebungsvariablen sollten eingestellt werden ~/.pam_environment.

Vermeiden Sie die Profil- und RC-Dateien zum Setzen von Umgebungsvariablen unter Ubuntu. Sie haben mir mehr Kopfschmerzen verursacht, als sie wert sind.

Das ist aber leichter gesagt als getan;)

Es ist möglich, dass Sie auf dieselbe Konfigurationslücke stoßen, die für mich bestand. Siehe die Problemumgehung für verschlüsseltes Zuhause weiter unten.

Meine ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Warum der hässliche statische Pfad? ${PATH}würde nicht für mich arbeiten. Ich habe mein Login mehrmals gemauert und versucht, es zu umgehen, also bleibe ich bei der hässlichen statischen Kopie der Standardeinstellungen :)

Problemumgehung für verschlüsselte private Ordner

Wenn Sie in Ubuntu-Versionen bis einschließlich Precise 12.04 Beta 2 ein verschlüsseltes Basisverzeichnis verwenden, müssen Sie Änderungen vornehmen /etc/pam.d/common-session, damit es geladen wird ~/.pam_environment. Diese Lösung funktioniert anscheinend für frühere Versionen, ich habe sie jedoch nicht getestet.

Guenther Montag (g-montag) schrieb am 19.08.2010:

Dies scheint ein Problem bei verschlüsselten Home-Verzeichnissen zu sein. Ich fügte hinzu

Sitzung erforderlich pam_env.so

am Ende von /etc/pam.d/common-session und jetzt wird ~ / .pam_environment gelesen. Auf einem anderen System ohne verschlüsselte Home-Verzeichnisse (auch 10.04) ist die Umgehung nicht erforderlich. Vielleicht versucht das System in meinem Fall, ~ / .pam_environment zu lesen, bevor es entschlüsselt wird.

Angepasst von meiner Antwort auf Super User: https://superuser.com/a/408373/66856

Alain O'Dea
quelle
Das ist immer noch falsch: ${HOME}wird auch nicht funktionieren. Es gibt keine Erweiterung in .pam_environment.
Detly
2
@detly gibt es eine Erweiterung in .pam_environment, aber HOMEist normalerweise nicht so früh eingestellt. Wenn diese Zeile gelesen hätte DEFAULT=${PATH}/Applications/jdk, hätten Sie den Wert von darin PATHeingefügt gesehen.
muru