Wie füge ich Umgebungsvariablen hinzu?

364

Ich verwende Ubuntu 11.04. Ich starte mit dem Terminal eine Bash-Sitzung und möchte eine Umgebungsvariable hinzufügen:

$r@hajt:~$ env THEVAR=/example

Aber es funktioniert nicht. Es zeigt alle Variablen an, wobei THEVAR die letzte ist, aber ein weiterer Aufruf von envnicht mehr zeigt THEVAR- env | grep THEVARgibt nichts zurück.

In ähnlicher Weise fügen Skripte mit export ( export THEVAR=/example) oder anderen Variablenzuweisungen ( THEVAR=/example) die Umgebungsvariable nicht hinzu.

Ich weiß, dass ich etwas falsch mache, ich weiß, dass es etwas Einfaches sein sollte, aber ich kann einfach nicht finden, was.

UPDATE: Die wahre Bedeutung meiner Frage war diese: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Wie auch immer, ich wähle die am häufigsten gewählte Antwort und lasse den bearbeiteten Titel - das war nicht das, wonach ich gefragt habe.)

env führt ein Programm in einer geänderten Umgebung aus und verwirft dann alle Änderungen.

huff
quelle
1
Wenn es in .bashrc definiert / exportiert ist, funktioniert es ordnungsgemäß.
Huff
Mögliches Duplikat der Umgebungsvariablen Google Earth und $ BROWSER
Jesaja
1
Wie wäre es THEVAR=/example?
Oleh Prypin
2
Bei der anderen handelt es sich um globale Variablen, bei dieser handelt es sich nicht um eine solche Einschränkung. Ich würde es getrennt halten.
Lekensteyn

Antworten:

570

So legen Sie die Variable nur für die aktuelle Shell fest:

VARNAME="my value"

So legen Sie es für die aktuelle Shell und alle Prozesse fest, die von der aktuellen Shell gestartet wurden:

export VARNAME="my value"      # shorter, less portable version

Um es für alle zukünftigen Bash-Sitzungen dauerhaft festzulegen, fügen Sie eine solche Zeile zu Ihrer .bashrcDatei in Ihrem $HOMEVerzeichnis hinzu.

Um es dauerhaft und systemweit (alle Benutzer, alle Prozesse) festzulegen, fügen Sie die festgelegte Variable in / etc / environment hinzu:

sudo -H gedit /etc/environment

Diese Datei akzeptiert nur Variablenzuweisungen wie:

VARNAME="my value"

Verwenden Sie hier nicht das exportSchlüsselwort.

Sie müssen sich vom aktuellen Benutzer abmelden und erneut anmelden, damit die Umgebungsvariablen geändert werden.

Michał Šrajer
quelle
29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot
1
@ Mr.Hyde ja, das ist wahrscheinlich ein vernünftiger Ort
Michał Šrajer
1
@BharadwajRaju, da auf einigen alten UNIX-Systemen nur Variablen exportiert werden können, die bereits festgelegt wurden. Zum Beispiel altes Solaris und HP-UX.
Michał Šrajer
1
Wie kann ich die Umgebungsvariable nach dem Festlegen schnell anzeigen, um sicherzustellen, dass sie festgelegt ist?
Rod
1
@ Rodecho $myvar
Qwerty
29

Um eine Umgebungsvariable einmal festzulegen, verwenden Sie den exportBefehl in der Eingabeaufforderung und nicht in einem Shell-Skript:

$ export THEVAR=/example

Die Variable wird für den Rest der Shell-Sitzung oder bis zur Deaktivierung gesetzt.

Verwenden Sie den exportBefehl in der .bashrcDatei (oder die entsprechende Initialisierungsdatei für Ihre Shell) , um jedes Mal eine Umgebungsvariable festzulegen .

Verwenden Sie zum Festlegen einer Umgebungsvariablen aus einem Skript den exportBefehl im Skript und dann sourcedas Skript. Wenn Sie das Skript ausführen, funktioniert es nicht.

Eine Erläuterung der Differenz zwischen Beschaffung und Ausführung sehen Sie diese Antwort: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- Bash-Skript / 176788 # 176788

lesmana
quelle
4
Wie kann ich es nur durch Ausführen des Skripts zum Laufen bringen? Ohne Sourcing.
Mithril
19

Führen Sie die folgenden Schritte aus, um eine neue Umgebungsvariable in Ubuntu dauerhaft hinzuzufügen (nur in 14.04 getestet):

  1. Öffnen Sie ein Terminal (durch Drücken von CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Geben Sie Ihr Passwort ein
  4. Bearbeiten Sie die gerade geöffnete Textdatei:
    Wenn Sie z. B. hinzufügen möchten FOO=bar, schreiben Sie einfach FOO=bareine neue Zeile
  5. Speichern Sie es
  6. Nach dem Speichern müssen Sie sich abmelden und erneut anmelden.
  7. Ihre erforderlichen Änderungen werden vorgenommen.
user355501
quelle
5
Ich habe Ihre Antwort bereinigt und die gefährlicheren Punkte entferntsudo gedit (siehe askubuntu.com/questions/270006/… ) und chmod 777. Letzteres sollte niemals in einer Systemkonfigurationsdatei durchgeführt werden.
muru
Dies ist eine korrekte Antwort für bestimmte Fälle. Alle Sitzungen, ob Benutzer-Shell-Sitzungen oder nicht, erhalten den Wert der hier festgelegten Variablen. Es ist wichtig zu beachten, dass dies zwar wie ein Shell-Skript aussieht, nicht aber - es ermöglicht Ihnen nur, Umgebungsvariablen festzulegen (im Gegensatz zur Verwendung von Shell-Funktionen wie ifoder test)
Tom Harrison Jr
Wenn der Balken eine Zeichenfolge ist, sollte ich ihn in Anführungszeichen setzen? Wie Foo="bar"?
blue_chip
@blue_chip Nein, funktioniert ohne Anführungszeichen.
Klicken Sie auf "Upvote
4
@blue_chip für Umgebungsvariablen, alles ist ein String. Sie brauchen nur Anführungszeichen, wenn sie Leerzeichen enthalten.
Ruslan
8

Um zu erreichen, dass die Umgebungs / var-Änderungen nach Abschluss des Skripts beibehalten werden, müssen Sie source ./script.shdie Kurzschreibweise "." Als Quelle verwenden. ./script.sh

Source führt die Befehle im Skript so aus, als ob Sie sie eingegeben hätten. Dadurch werden einige Aspekte des Skripts geändert, z. Durch einen Anruf exit 0wird die aktuelle Terminal- / Shell-Sitzung beendet.

m0bl
quelle
Dies ist eine sehr alte Frage, die bereits eine akzeptierte Antwort und ein paar andere hat ... Bedenken Sie, Beantwortung neuerer Fragen bitte ...
NerdOfCode
3
@NerdOfCode Diese Antwort behebt ein Problem, das immer noch relevant ist. Soweit ich sehen kann, erwähnt keine der anderen Antworten, einschließlich der akzeptierten, das Problem. Das wird also empfohlen
Zanna
1
Genau das habe ich gesucht. Ich musste aus dem Skript heraus sehen, welche Variablen aus dem Skript exportiert wurden.
Albanx
5

Wenn Sie Dinge über ein Skript erledigen, können Sie die Umgebungsvariable auf einfache Weise dauerhaft unter der Anweisung in Ihrem Skript festlegen.

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Wenn Sie Ausdrücke wie pwd auswerten müssen, können Sie dies zum Beispiel verwenden,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
Shital Shah
quelle
1

Ich weiß, dass es ziemlich spät ist, aber wenn Sie eine Umgebungsvariable für alle Benutzer hinzufügen möchten (z. B. JAVA-Nutzung), können Sie Folgendes tun:

1) Öffnen /etc/bash.bashrcmit Nano (Sie können jeden Editor verwenden, ich bevorzuge VIM nicht, da es das schlechteste ist, wenn es um Benutzerfreundlichkeit geht - nichts Persönliches).

2) An die Datei anhängen:

export VAR=path export PATH=$PATH:/bin 3) (Besser, wenn Sie die Box bouncen können) - oder öffnen Sie einfach eine neue SSH-Sitzung und bestätigen Sie mit dem Befehl `env '.

ABER WENN Sie möchten, dass jeder Benutzer eine separate Einstellung dafür hat, müssen Sie eine Änderung (Skript) an der .bashrcDatei unter vornehmen ~/.bashrc(oder /home/$USER/wenn Sie neu in Linux-Systemen sind)

ha9u63ar
quelle