Ich verwende Red Hat Linux Enterprise 5. Ich verwende immer den Befehl export, um Umgebungsvariablen festzulegen.
Gibt es andere Möglichkeiten, Umgebungsvariablen festzulegen, und welche Vor- und Nachteile haben sie?
Ich verwende Red Hat Linux Enterprise 5. Ich verwende immer den Befehl export, um Umgebungsvariablen festzulegen.
Gibt es andere Möglichkeiten, Umgebungsvariablen festzulegen, und welche Vor- und Nachteile haben sie?
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
Ü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.
quelle
Export ist der einfachste Weg, warum also nicht dabei bleiben?
quelle
FOO=BAR; executethisprogram
Das Programmexecutethisprogram
kennt den Wert der Variablen NICHTFOO
. Andererseits bei Verwendung von:FOO=BAR; export FOO; executethisprogram
Das Programmexecutethisprogram
kennt den Wert der VariablenFOO
.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:
Beispielsweise:
Ausgabe in Englisch.
Ausgabe in polnischer Sprache (falls verfügbar).
In der Vergangenheit konnte man in sh VAL = val nicht exportieren. Du musstest
quelle
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 ichls
an einer Eingabeaufforderung tippe, ist die interaktive Shell das übergeordnete undls
das untergeordnete Element. Wenn ich ein Skript habe, das verwendet,ls
ist das Skript das übergeordnete undls
das untergeordnete Skript .