Ich bin ein wenig neu in Linux und führe einige Befehle blind aus, um Dinge zu erledigen. Ich dachte, dass es keine Verschwendung sein wird, solche Fragen zu stellen, da mehr neue Leute regelmäßig darüber Bescheid wissen würden.
Ich habe kürzlich angefangen, mit Jenkins zu arbeiten , und dann musste ich diesen export
Befehl verwenden, um das Jenkins-Kriegsarchiv auszuführen . Ich musste also wissen, was der export
Befehl im Allgemeinen tut und warum wir diesen Befehl ausführen müssen, während wir Jenkins ausführen (nachdem das Jenkins-Home festgelegt wurde).
Vielen Dank!
shell
unix
command
environment-variables
Chathura Kulasinghe
quelle
quelle
Antworten:
export
Insh
und verwandten Shells (z. B.bash
) wird eine Umgebungsvariable markiert, die in untergeordnete Prozesse exportiert werden soll, damit das untergeordnete Element sie erbt.export
ist in POSIX definiert :quelle
Ich denke, Sie kommen aus einem Windows-Hintergrund. Also werde ich sie kontrastieren (ich bin auch ein bisschen neu in Linux). Ich fand die Antwort des Benutzers auf meinen Kommentar nützlich, um Dinge herauszufinden.
In Windows kann eine Variable permanent sein oder nicht. Der Begriff Umgebungsvariable umfasst eine Variable, die in der cmd-Shell mit dem Befehl SET festgelegt wurde, sowie wenn die Variable in der Windows-GUI festgelegt und somit in der Registrierung festgelegt wurde und in neuen cmd-Fenstern angezeigt werden kann. zB Dokumentation für den Befehl set in Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Zeigt Umgebungsvariablen an, legt sie fest oder entfernt sie. Wird ohne Parameter verwendet, zeigt set die aktuellen Umgebungseinstellungen an." Unter Linux zeigt set keine Umgebungsvariablen an, sondern Shell-Variablen, die nicht als Umgebungsvariablen bezeichnet werden. Außerdem verwendet Linux set nicht zum Festlegen von Variablen (abgesehen von Positionsparametern und Shell-Optionen, die ich am Ende als Hinweis erläutere), sondern nur zum Anzeigen und selbst dann nur zum Anzeigen von Shell-Variablen. Windows verwendet set zum Einstellen und Anzeigen, z. B. set a = 5, Linux nicht.
Unter Linux können Sie vermutlich ein Skript erstellen, das beim Booten Variablen festlegt, z. B.
/etc/profile
oder/etc/.bashrc
ansonsten sind sie nicht permanent. Sie sind im RAM gespeichert.Unter Linux wird zwischen Shell-Variablen und Umgebungsvariablen unterschieden. Unter Linux befinden sich Shell-Variablen nur in der aktuellen Shell, und Umgebungsvariablen befinden sich in dieser Shell und allen untergeordneten Shells.
Sie können Shell-Variablen mit dem
set
Befehl anzeigen (beachten Sie jedoch, dass Variablen im Gegensatz zu Windows nicht mit dem Befehl set unter Linux festgelegt werden).set -o posix; set
(Wenn Sie dieses Set -o zuerst einmal ausführen, wird nicht zu viel unnötiges Material angezeigt.) Soset
zeigt Shell - Variablen.Sie können Umgebungsvariablen mit dem
env
Befehl anzeigenShell-Variablen werden zB mit just gesetzt
a = 5
Umgebungsvariablen werden mit export festgelegt, export legt auch die Shell-Variable fest
Hier sehen Sie die Shell-Variable zzz, die mit zzz = 5 gesetzt ist, und sie wird beim Ausführen angezeigt
set
, jedoch nicht als Umgebungsvariable.Hier sehen wir yyy mit export gesetzt, also ist es eine Umgebungsvariable. Und siehe, es wird sowohl unter Shell-Variablen als auch unter Umgebungsvariablen angezeigt
andere nützliche Themen
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Hinweis: Ein Punkt, der ein wenig näher ausgeführt wird und etwas korrigiert, was ich geschrieben habe, ist, dass in Linux Bash 'set' verwendet werden kann, um "Positionsparameter" und "Shell-Optionen / Attribute" festzulegen, und technisch beides Dies sind Variablen, obwohl die Manpages sie möglicherweise nicht als solche beschreiben. Wie bereits erwähnt, setzt set jedoch keine Shell-Variablen oder Umgebungsvariablen. Wenn Sie dies tun
set asdf
, wird $ 1 auf asdf gesetzt, und wenn Sie dies tunecho $1
, sehen Sie asdf. Wenn Sie tunset a=5
Die Variable a wird nicht gleich 5 gesetzt. Der Positionsparameter $ 1 wird gleich der Zeichenfolge "a = 5" gesetzt. Wenn Sie also jemals gesehen haben, dass unter Linux a = 5 gesetzt ist, ist dies wahrscheinlich ein Fehler, es sei denn, jemand wollte diese Zeichenfolge a = 5 in $ 1. Das andere, was Linux einstellen kann, sind Shell-Optionen / Attribute. Wenn Sie -o setzen, sehen Sie eine Liste von ihnen. Und Sie können zum Beispielset -o verbose
aus, um ausführlich zu schalten (übrigens ist die Standardeinstellung aus, aber das macht keinen Unterschied). Oder Sie können tunset +o verbose
, um ausführlich zu deaktivieren. Windows hat keine solche Verwendung für seinen Befehl set.quelle
In einfachen Worten, Umgebungsvariablen werden festgelegt, wenn Sie eine neue Shell-Sitzung öffnen. Wenn Sie einen der Variablenwerte ändern, kann die Shell diese Änderung jederzeit nicht auswählen. Das bedeutet, dass die von Ihnen vorgenommenen Änderungen in neuen Shell-Sitzungen wirksam werden. Der
export
Befehl bietet andererseits die Möglichkeit, die aktuelle Shell-Sitzung über die Änderung zu aktualisieren, die Sie an der exportierten Variablen vorgenommen haben. Sie müssen nicht bis zur neuen Shell-Sitzung warten, um den Wert der von Ihnen geänderten Variablen zu verwenden.quelle
a=5
dann sage, dannecho $a
heißt es 5. Sie haben jedoch geschrieben: "Wenn Sie einen der Variablenwerte jederzeit ändern, kann die Shell diese Änderung nicht auswählen. Dies bedeutet, dass die von Ihnen vorgenommenen Änderungen in neuen Shell-Sitzungen wirksam werden." . <- Wie wurde die Shell-Sitzung ohne Export aktualisiert? Können Sie ein Beispiel geben, wo ein Export notwendig ist?