Wie exportiere ich eine Variable dauerhaft unter Linux?

154

Ich verwende RHEL6 und habe eine Umgebungsvariable wie folgt exportiert:

export DISPLAY=:0

Diese Variable geht verloren, wenn das Terminal geschlossen wird. Wie füge ich dies dauerhaft hinzu, damit dieser Variablenwert immer bei einem bestimmten Benutzer vorhanden ist?

user1340582
quelle

Antworten:

170

Sie können es Ihrer Shell-Konfigurationsdatei hinzufügen, z. B. $HOME/.bashrcoder globaler in /etc/environment. Nach dem Hinzufügen dieser Zeilen werden die Änderungen in GUI-basierten Systemen nicht sofort wiedergegeben. Sie müssen das Terminal verlassen oder ein neues erstellen und sich auf dem Server abmelden und anmelden, um diese Änderungen wiederzugeben.

Antoine
quelle
3
Danke, das ist hilfreich. Wie kann ich Änderungen ohne Neustart wirksam machen? (Ich bin Linux-Neuling)
Bitterblue
5
@ mini-me - ~ / bashrc wird jedes Mal gezogen, wenn Sie eine Shell öffnen. Verwenden Sie zum expliziten Laden sourcezB - > source ~/.bashrc.
Kostja
@kostja Für alle neuen Muscheln? Wenn Eclipse ausgeführt wird, bevor ich diese env-Variablen ändere, und ich möchte, dass Eclipse vars geändert hat, muss ich Eclipse neu starten?
Bitterblue
1
@ mini-me: Die Umgebung eines Prozesses wird normalerweise vom Aufrufer festgelegt und innerhalb des Prozesses geändert. Das Ändern der Umgebung von außerhalb eines laufenden Prozesses ist ungewöhnlich und nicht machbar export, aber versuchen Sie es mit einem Debugger
Antoine
1
@ Mr.Hyde: Es spielt normalerweise keine Rolle. Dateien werden von oben nach unten analysiert. Wenn also eine var-Definition von einer anderen abhängt, sollten sie entsprechend sortiert werden. Also ja, das Ende der Datei ist in Ordnung.
Antoine
120

Sie müssen drei Dateien bearbeiten, um eine permanente Umgebungsvariable wie folgt festzulegen:

  • ~ / .bashrc

    Wenn Sie ein Terminalfenster öffnen, wird diese Datei ausgeführt. Wenn Sie daher in allen Terminalfenstern eine permanente Umgebungsvariable haben möchten, müssen Sie am Ende dieser Datei die folgende Zeile einfügen :
    export DISPLAY = 0

  • ~ / .profile

  • Wie bei bashrc müssen Sie die angegebene Befehlszeile am Ende dieser Datei einfügen , damit Ihre Umgebungsvariable in jedem Login Ihres Betriebssystems enthalten ist.

  • / etc / environment

  • Wenn Sie möchten, dass Ihre Umgebungsvariable in jedem Fenster oder jeder Anwendung (nicht nur im Terminalfenster) vorhanden ist, müssen Sie diese Datei bearbeiten. Fügen Sie den folgenden Befehl am Ende dieser Datei:
    DISPLAY = 0
    Beachten Sie, dass in dieser Datei müssen Sie nicht zu schreiben Exportbefehl

Normalerweise müssen Sie Ihren Computer neu starten, um diese Änderungen zu übernehmen. Mit den folgenden Befehlen können Sie jedoch Änderungen in bashrc und profile anwenden :

$ source ~/.bashrc
$ source ~/.profile

Aber für / etc / environment hast du keine andere Wahl als neu zu starten (soweit ich weiß)

  • Eine einfache Lösung

  • Ich habe ein einfaches Skript für diese Prozeduren geschrieben, um all diese Arbeiten zu erledigen. Sie müssen nur den Namen und den Wert Ihrer Umgebungsvariablen festlegen.

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    Speichern Sie diese Zeilen in einer Datei, machen Sie sie ausführbar und führen Sie sie einfach aus!

    e_soroush
    quelle
    1
    Das Skript hat sehr gut funktioniert. Ich habe Ubuntu 14.04 installiert. Ich klebte nur den Inhalt oben in eine leere Datei mit dem Namen es insert_var.sh , dann chmod -x insert_var.sh, dann bash insert_var.sh. Vielen Dank.
    Brunno Vodola Martins
    Ich habe ein Terminalfenster in Ubuntu geöffnet und exportiere MY_VAR = 1. Wo wird diese Variable MY_VAR gespeichert?
    Vgokul129
    29

    Fügen Sie die Zeile zu Ihrem .bashrcoder hinzu .profile. Die eingestellten Variablen $HOME/.profilesind für den aktuellen Benutzer aktiv, die eingegebenen /etc/profilesind global. Das .bashrcwird bei jedem Start der Bash-Sitzung gezogen.

    kostja
    quelle
    27

    Verwenden Sie auf Ubuntu-Systemen die folgenden Speicherorte:

    1. Systemweite persistente Variablen im Format JAVA_PATH=/usr/local/javaSpeichern in

      /etc/environment
      
    2. Systemweite persistente Variablen, die auf Variablen verweisen, z. B.
      export PATH="$JAVA_PATH:$PATH"Speichern in

      /etc/.bashrc
      
    3. Benutzerspezifische persistente Variablen im Format PATH DEFAULT=/usr/bin:usr/local/binSpeichern in

      ~/.pam_environment
      

    Weitere Informationen zu # 2 finden Sie in dieser Antwort von Ubuntu . HINWEIS: # 3 ist die Ubuntu-Empfehlung, kann jedoch in der realen Welt Sicherheitsbedenken haben.

    csi
    quelle
    2

    Ein besonderes Beispiel: Ich habe Java 7 und Java 6 installiert, ich muss einige Builds mit 6 ausführen, andere mit 7. Daher muss ich dynamisch ändern, JAVA_HOMEdamit Maven für jeden Build das übernimmt, was ich will. Ich habe folgendes gemacht:

    • erstelltes j6.shSkript, das einfach den JAVA_HOME=...Pfad zur j6-Installation exportiert ...
    • Dann führe ich, wie in einem der obigen Kommentare vorgeschlagen, immer dann, wenn ich J6 für einen Build benötige, die Quelle j6.shin dem jeweiligen Befehlsterminal aus. Standardmäßig ist my JAVA_HOMEauf J7 eingestellt.

    Hoffe das hilft.

    Cristian Botiza
    quelle