Frage Wie füge ich Umgebungsvariablen hinzu?


Ich benutze Ubuntu 11.04. Ich benutze das Terminal, um eine Bash-Sitzung zu starten, und ich möchte eine Umgebungsvariable hinzufügen:

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

Aber es funktioniert nicht. Es zeigt alle Variablen an, wobei THEVAR der letzte ist, aber ein anderer Aufruf an env zeigt nicht THEVAR nicht mehr- env | grep THEVAR gibt nichts zurück.

Ebenso Skripte mit Export (export THEVAR=/example) oder andere variable Zuordnungen (THEVAR=/example) füge die Umgebungsvariable nicht hinzu.

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

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

(Jedenfalls wähle ich die am meisten gewählte Antwort und hinterlasse den bearbeiteten Titel - das war nicht das, was ich gefragt habe)

env Führt ein Programm in einer geänderten Umgebung aus und weist dann alle Änderungen zurück.


224
2017-08-27 00:22


Ursprung


Wenn es in .bashrc definiert / exportiert wird, funktioniert es ordnungsgemäß. - huff
mögliches Duplikat von Google Earth- und $ BROWSER-Umgebungsvariable - Isaiah
Wie wäre es mit THEVAR=/example? - Oleh Prypin
Die andere betrifft globale Variablen, diese fügt keine solche Beschränkung hinzu. Ich würde es getrennt halten. - Lekensteyn
help.ubuntu.com/community/UmweltVariablen - huff


Antworten:


Variable einstellen nur für die aktuelle Shell:

VARNAME="my value"

Um es für die aktuelle Shell und alle Prozesse von der aktuellen Shell gestartet:

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

Um es einzustellen permanent Für alle zukünftigen bash-Sitzungen fügen Sie eine solche Zeile hinzu .bashrc Datei in Ihrem $HOME Verzeichnis.

Um es dauerhaft einzustellen, und systemweit (alle Benutzer, alle Prozesse) fügen set Variable in / etc / environment hinzu:

sudo -H gedit /etc/environment

Diese Datei akzeptiert nur Variablenzuweisungen wie:

VARNAME="my value"

Benutze nicht die export Stichwort hier.

Sie müssen sich vom aktuellen Benutzer abmelden und erneut anmelden, damit die Änderungen der Umgebungsvariablen stattfinden.


363
2017-08-27 07:50



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/UmweltVariablen - SudoSURoot
Wo sollte ich meine spezifische Zeile hinzufügen ?! unten auf der .bashrc-Seite ?! - Mr.Hyde
@ Mr.Hyde Ja, das ist wahrscheinlich ein vernünftiger Ort - Michał Šrajer
Warum ist der zweite weniger tragbar? - UniversallyUniqueID
@BharadwajRaju, weil auf einigen alten UNIX-Systemen nur Variablen exportiert werden können, die bereits gesetzt sind. Alt-Solaris und HP-UX zum Beispiel. - Michał Šrajer


Um eine Umgebungsvariable einmal festzulegen, verwenden Sie die export Befehl in der Eingabeaufforderung, nicht in einem Shell-Skript:

$ export THEVAR=/example

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

Um eine Umgebungsvariable jedes Mal festzulegen, verwenden Sie die export Befehl in der .bashrc Datei (oder die entsprechende Initialisierungsdatei für Ihre Shell).

Um eine Umgebungsvariable aus einem Skript zu setzen, verwenden Sie die export Befehl im Skript und dann source das Skript. Wenn Sie das Skript ausführen, wird es nicht funktionieren.

Für eine Erklärung des Unterschieds zwischen Sourcing und Ausführung siehe diese Antwort: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788


21
2017-08-27 07:20



Wie kann ich es nur durch Ausführen des Skripts funktionieren lassen? Ohne Beschaffung. - Mithril


Um eine neue Umgebungsvariable in Ubuntu (getestet nur in 14.04) dauerhaft hinzuzufügen, gehen Sie folgendermaßen vor:

  1. Öffnen Sie ein Terminal (durch Drücken von StrgAltT)
  2. sudo -H gedit /etc/environment
  3. Geben Sie Ihr Passwort ein
  4. Bearbeiten Sie die gerade geöffnete Textdatei:
    z.B. wenn Sie hinzufügen möchten FOO=barDann schreibe einfach FOO=bar in einer neuen Zeile
  5. Speichere es
  6. Einmal gespeichert, loggen Sie sich aus und loggen Sie sich wieder ein.
  7. Ihre erforderlichen Änderungen werden vorgenommen.

15
2017-12-07 08:45



Ich habe deine Antwort aufgeräumt und die gefährlicheren Teile entfernt sudo gedit (Sehen 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 eingestellten Variablen. Es ist wichtig zu beachten, dass dies zwar wie ein Shell-Skript aussieht, aber nicht - es erlaubt Ihnen nur, Umgebungsvariablen zu setzen (im Gegensatz zu Shell-Funktionen wie if oder test) - Tom Harrison Jr
Wenn bar eine Zeichenkette ist, sollte ich sie zwischen Anführungszeichen setzen? Mögen Foo="bar"? - blue_chip
@blue_chip Nein, funktioniert ohne Anführungszeichen. - Click Upvote
@blue_chip für Umgebungsvariablen, alles ist eine Zeichenkette. Sie benötigen nur Anführungszeichen, wenn sie Leerzeichen enthalten. - Ruslan


Um zu erreichen, dass die Änderungen in der Umgebung / var nach Abschluss des Skripts erhalten bleiben, müssen Sie sie verwendensource ./script.sh oder die Kurzschreibweise für Quelle, ".", wie . ./script.sh

Source führt die Befehle im Skript so aus, als ob Sie sie eingegeben hätten ... also ändert es einige Aspekte des Skripts, wie zum Beispiel das Beenden ... Wenn also Ihr Skript etwas überprüft und sich entscheidet, es zu beenden, wenn es zum Beispiel falsch ist, per Anruf exit 0, es wird Ihre aktuelle Terminal / Shell-Sitzung beenden.


3
2018-03-16 15:09



Dies ist eine sehr alte Frage, die bereits eine akzeptierte Antwort und einige andere hat ... Überlegen Sie sich, beantworten Sie neuere Fragen bitte ... - NerdOfCode
@NerdOfCode Diese Antwort adressiert ein Problem, das ist immer noch relevant und keine der anderen Antworten, einschließlich des akzeptierten, erwähne es, soweit ich das beurteilen kann ... Es gibt tatsächlich zwei Abzeichen, die gute Antworten auf alte Fragen liefern, daher wird dies ermutigt - Zanna


Wenn Sie Dinge über ein Skript erledigen, ist eine einfache Möglichkeit, die Umgebungsvariable dauerhaft festzulegen, die Anweisung in Ihrem Skript.

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 z.

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

1
2017-07-12 02:06