Antworten:
Dies ist ein Auszug aus der Bash-Manpage:
export [-fn] [name [= word]] ...
export -p
Die angegebenen Namen sind für den automatischen Export nachfolgend ausgeführter Befehle in die Umgebung markiert. Wenn die Option -f angegeben ist, beziehen sich die Namen auf Funktionen ...
Wenn Sie die Variable nur in der aktuellen Umgebung benötigen, ist der Export nicht erforderlich.
var=value
Bearbeiten:
Ohne Export: nur aktuelle Umgebung. Mit Export: aktuelle Umgebung und untergeordnete Umgebungen.
Hier ist eine Demonstration der Auswirkung des Exports auf die Verfügbarkeit einer Variablen in einer untergeordneten Umgebung und dass Änderungen in der untergeordneten Umgebung keine Auswirkungen auf die übergeordnete Umgebung haben:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Nach dem ersten echo ( echo "parent..."
) sehen Sie "123" und "456", da beide var1
und var2
in der aktuellen Umgebung aktiv sind. Sie sehen keinen Wert für, var3
da er noch nicht festgelegt ist.
Nach der Zeile, die " var3=...
" beginnt , wird kein Wert für var1
angezeigt, da er nicht exportiert wurde. Sie tun einen Wert für sehen , var2
weil es wurde exportiert. Sie sehen einen Wert für , var3
weil es für das Kind Umgebung wurde nur .
( bash -c
Entspricht dem Ausführen eines Skripts mit dem Inhalt des Arguments für die -c
Option. Ein Skript oder eine andere ausführbare Datei oder in diesem Fall das Argument, um bash -c
ein untergeordnetes Element der aktuellen Umgebung zu werden, die daher natürlich das untergeordnete Element ist Elternteil.)
Im "Skript" werden die Werte der Variablen geändert. Es gibt jetzt diese neuen Werte aus.
Sobald das "Skript" fertig ist, kehrt die Ausführung zur übergeordneten Umgebung zurück (in diesem Fall zur Befehlszeile). Nach dem letzten Echo werden die ursprünglichen Werte angezeigt, da die in der untergeordneten Umgebung vorgenommenen Änderungen keine Auswirkungen auf das übergeordnete Element haben.
export
Dies ist der Zweck von - Variablen für diese untergeordneten Umgebungen verfügbar zu machen.
Du sagst das
Ich verwende immer den Befehl export, um die Umgebungsvariable festzulegen
Übrigens, Sie haben das so formuliert, als würden Sie wirklich fragen, wie eine Umgebungsvariable bestehen bleibt. Dazu müssten Sie Ihre export VAR="foo"
Anweisung in Ihre Datei $ HOME / .bash_profile einfügen (wenn Sie bash verwenden). Wenn diese Umgebungsvariable für alle Benutzer außer root bestehen bleiben soll, fügen Sie sie zu / etc / profile hinzu. Wenn Sie möchten, dass es auch für den Root-Benutzer hinzugefügt wird, legen Sie es in /root/.bash_profile fest.
Dies funktioniert für alle Login-Shells, bei denen bash die Shell der Wahl ist. Für Shells ohne Login müssen Sie .bashrc verwenden. Ich habe keine Erkenntnisse für andere Muscheln anzubieten: D.
Export ist der einfachste Weg, warum also nicht dabei bleiben?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
Das Programm executethisprogram
kennt den Wert der Variablen NICHT FOO
. Andererseits bei Verwendung von: FOO=BAR; export FOO; executethisprogram
Das Programm executethisprogram
kennt den Wert der Variablen FOO
.
export FOO
ist ein Befehl, der die Variable markiert, FOO
damit untergeordnete Prozesse der Umgebung, in der der Befehl ausgegeben wurde, auf sie zugreifen können. Dieses übergeordnete Element kann ein Skript oder eine interaktive Shell sein.
Sie können auch so etwas tun:
VAR=val application
Beispielsweise:
LANG=C ls --help
Ausgabe in Englisch.
LANG=pl_PL ls --help
Ausgabe in polnischer Sprache (falls verfügbar).
In der Vergangenheit konnte man in sh VAL = val nicht exportieren. Du musstest
VAL=val; export VAL
ls
z. B.) festgelegt, ohne den Wert dieser Variablen in der aktuellen (übergeordneten) Umgebung zu beeinflussen.
ls
ist ein Kind des Prozesses, von dem es ausgeführt wurde. Wenn ich ls
an einer Eingabeaufforderung tippe, ist die interaktive Shell das übergeordnete und ls
das untergeordnete Element. Wenn ich ein Skript habe, das verwendet, ls
ist das Skript das übergeordnete und ls
das untergeordnete Skript .