it-swarm.com.de

Quelle vs Export vs Export LD_LIBRARY_PATH

Beim Kompilieren von Anwendungen aus dem Quellcode mit make oder cmake lauten die Anweisungen normalerweise:

source <some path> <parameter>

export <some text>

Auch viel Zeit LD_LIBRARY_PATH wird mit export verwendet.

Was ist der Unterschied zwischen source und export? Warum brauchen wir sie?

1
ankit7540

Die Shell-Befehle source und export sind wirklich verschiedene Dinge. Zusamenfassend:

source

Wenn Sie ein Shell-Skript wie gewohnt aufrufen (z. B. mit ./myscript.sh Oder sh myscript.sh), Wird es in einem eigenen Prozesskontext (einer neuen Prozessumgebung) ausgeführt, sodass alle Variablen im Skript festgelegt werden wird in der aufrufenden Shell nicht verfügbar sein. Wenn Sie ein Skript mit dem Befehl source ausführen, wird es im Kontext des aufrufenden Skripts ausgeführt. Auf diese Weise können Sie Umgebungsvariablen setzen, indem Sie source myscript Aufrufen.

export

Umgebungsvariablen sind normalerweise nur im (lokalen) Kontext des aktuellen Prozesses gültig. Wenn Sie also etwas (Skript oder Programm) ausführen, das eine neue Prozessumgebung anfordert, wird die lokale Umgebung im neuen Prozess nicht angezeigt. Um Umgebungswerte an einen untergeordneten Prozess zu übergeben, müssen Sie diese "exportieren", indem Sie der Zuweisung export voranstellen, z. export VAR=value.

export LD_LIBRARY_PATH

Die spezielle Umgebungsvariable LD_LIBRARY_PATH Definiert den Pfad, in dem nach ladbaren Bibliotheken gesucht wird (ähnlich der PATHVariable, die definiert, wo nach ausführbaren Dateien gesucht werden soll). Standardmäßig werden Bibliotheken in /lib, /usr/lib Und dergleichen durchsucht. In nicht standardmäßigen Verzeichnissen (z. B. /opt/program/lib) Installierte Bibliotheken können nur geladen werden, wenn diese Pfade in diesem Beispiel zusätzlich durch export LD_LIBRARY_PATH=/opt/program/lib Definiert sind. Sie müssen hier exportieren, da dies der neuen Prozessumgebung bekannt sein muss, in der Ihr Programm ausgeführt wird.


Persistenz

Die Prozessumgebung ist vorhanden, solange der Prozess ausgeführt wird. Dies gilt auch für die Umgebungsvariablen (wenn nicht explizit deaktiviert). Wenn der Prozess abgebrochen wird (z. B. durch Schließen des Terminalfensters), werden normalerweise auch alle Unterprozesse abgebrochen und die Umgebung (en) gelöscht. Genauer gesagt hängt dies davon ab, wie der untergeordnete Prozess auf SIGHUP reagiert. Ist dies nicht der Fall, wird es als untergeordnetes Element des Benutzerprozesses (z. B. /sbin/upstart --user) Oder des Init-Prozesses (PID = 1) weiter ausgeführt.

Eine Möglichkeit, Teilprozesse das Beenden des übergeordneten Prozesses überwinden zu lassen, besteht darin, sie mit dem Befehl Nohup (siehe man Nohup) Aus dem übergeordneten Prozess freizugeben, an den SIGHUP nicht übergeben wird das Kind und Freigabe des Prozesses in den Hintergrund:

Nohup <progname> &

trennt den Prozess vom übergeordneten Element, weist STDIN /dev/null und STDOUT ./Nohup.out zu.

5
ridgy