source vs export vs export LD_LIBRARY_PATH

1

Lors de la compilation d’applications à partir du code source en utilisant make ou cmake , les instructions indiquent généralement

source <some path> <parameter>

export <some text>

En outre, beaucoup de temps LD_LIBRARY_PATH est utilisé, utilisé avec export .

Quelle est la différence entre source et export ? Pourquoi avons-nous besoin d'eux?

    
posée ankit7540 19.12.2016 - 10:24
la source

1 réponse

4

Les commandes shell source et export sont vraiment différentes. En bref:

source

Lorsque vous appelez un script shell de la manière habituelle (par exemple avec ./myscript.sh ou sh myscript.sh ), il sera exécuté dans son propre contexte de processus (un nouvel environnement de processus), de sorte que toutes les variables définies dans le script ne seront pas disponible dans le shell appelant. Lors de l'exécution d'un script à l'aide de la commande source , il sera exécuté dans le contexte du script appelant. De cette façon, vous pouvez définir des variables d’environnement en appelant source myscript .

export

Les variables d'environnement ne sont généralement valides que dans le contexte (local) du processus en cours. Donc, si vous exécutez quelque chose (script ou programme) qui demande un nouvel environnement de processus, l'environnement local ne sera pas visible dans le nouveau processus. Pour transmettre des valeurs d'environnement à un processus enfant, vous devez les «exporter» en effectuant l'attribution avec export , par ex. export VAR=value .

export LD_LIBRARY_PATH

La variable d'environnement spéciale LD_LIBRARY_PATH définit le chemin d'accès aux bibliothèques chargeables (similaire à la variable PATH , qui définit où rechercher les exécutables). Par défaut, les bibliothèques sont recherchées dans /lib , /usr/lib et autres. Les bibliothèques installées dans des répertoires non standard (par exemple, /opt/program/lib ) ne peuvent être chargées que lorsque ces chemins sont définis par export LD_LIBRARY_PATH=/opt/program/lib dans cet exemple. Vous devez exporter ici, car cela doit être connu du nouvel environnement de processus dans lequel s'exécute votre programme.

Persistance

L'environnement du processus existe tant que le processus est en cours d'exécution; Cela est également vrai pour les variables d'environnement (lorsqu'elles ne sont pas explicitement désactivées). Si le processus est tué (par exemple, en fermant la fenêtre du terminal), tous les sous-processus seront également supprimés et l'environnement sera supprimé. Plus précisément, cela dépend de la façon dont le processus enfant réagit sur SIGHUP . Si ce n'est pas le cas, il sera exécuté en tant qu'enfant du processus utilisateur (par exemple, /sbin/upstart --user ) ou du processus init (PID = 1).

Une façon de faire en sorte que les sous-processus surmontent le processus parent est de les libérer du processus parent en utilisant la commande nohup (voir man nohup ), qui ne transmettra pas SIGHUP à l'enfant. processus en arrière-plan:

nohup <progname> &

détachera le processus du parent, affectera STDIN à /dev/null et STDOUT à ./nohup.out .

    
réponse donnée ridgy 19.12.2016 - 11:17
la source

Lire d'autres questions sur les étiquettes