Je suis un peu nouveau sur Linux, et il se trouve que j'exécute certaines commandes à l'aveugle, afin de faire avancer les choses. Je pensais que ce ne serait pas un gaspillage de poser ce type de questions, car davantage de nouvelles personnes auraient une connaissance régulière de celles-ci.
J'ai commencé à travailler avec Jenkins récemment, puis j'ai dû utiliser cette export
commande pour exécuter l' archive de guerre Jenkins . J'avais donc besoin de savoir ce que fait la export
commande en général, et pourquoi nous devons exécuter cette commande, tout en exécutant Jenkins (après la définition de la maison Jenkins).
Merci!
shell
unix
command
environment-variables
Chathura Kulasinghe
la source
la source
Réponses:
export
insh
et les shells associés (tels quebash
), marque une variable d'environnement à exporter vers les processus enfants, afin que l'enfant en hérite.export
est défini dans POSIX :la source
Je suppose que vous venez d'un arrière-plan Windows. Je vais donc les comparer (je suis un peu nouveau sur Linux aussi). J'ai trouvé que la réponse de l'utilisateur à mon commentaire était utile pour comprendre les choses.
Sous Windows, une variable peut être permanente ou non. Le terme variable d'environnement comprend une variable définie dans le shell cmd avec la commande SET, ainsi que lorsque la variable est définie dans l'interface graphique Windows, ainsi définie dans le registre, et devient visible dans de nouvelles fenêtres cmd. par exemple, la documentation de la commande set dans Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Affiche, définit ou supprime les variables d'environnement. Utilisé sans paramètres, set affiche les paramètres d'environnement actuels." Sous Linux, set n'affiche pas les variables d'environnement, il affiche des variables shell qu'il n'appelle pas / ne fait pas référence en tant que variables d'environnement. De plus, Linux n'utilise pas set pour définir des variables (à l'exception des paramètres de position et des options de shell, que j'explique comme une note à la fin), uniquement pour les afficher et même alors uniquement pour afficher les variables du shell. Windows utilise set pour définir et afficher par exemple set a = 5, ce n'est pas le cas pour Linux.
Sous Linux, je suppose que vous pouvez créer un script qui définit des variables au démarrage, par exemple
/etc/profile
ou/etc/.bashrc
sinon, elles ne sont pas permanentes. Ils sont stockés dans la RAM.Il existe une distinction sous Linux entre les variables shell et les variables d'environnement. Sous Linux, les variables shell se trouvent uniquement dans le shell actuel, et les variables d'environnement sont dans ce shell et tous les shells enfants.
Vous pouvez afficher les variables shell avec la
set
commande (mais notez que contrairement à Windows, les variables ne sont pas définies sous Linux avec la commande set).set -o posix; set
(faire ce set -o posix une fois en premier, permet de ne pas afficher trop de choses inutiles).set
Affiche donc les variables du shell.Vous pouvez afficher les variables d'environnement avec la
env
commandeles variables shell sont définies avec par exemple juste
a = 5
les variables d'environnement sont définies avec l'exportation, l'exportation définit également la variable shell
Ici, vous voyez la variable shell zzz définie avec zzz = 5, et vous voyez qu'elle apparaît lors de l'exécution
set
mais ne s'affiche pas comme une variable d'environnement.Ici, nous voyons yyy défini avec export, donc c'est une variable d'environnement. Et voyez-le sous les variables shell et les variables d'environnement
$ zzz=5 $ set | grep zzz zzz=5 $ env | grep zzz $ export yyy=5 $ set | grep yyy yyy=5 $ env | grep yyy yyy=5 $
autres fils utiles
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Remarque - un point qui élabore un peu et corrige quelque peu ce que j'ai écrit, c'est que, sous Linux bash, 'set' peut être utilisé pour définir des "paramètres positionnels" et des "options / attributs du shell", et techniquement les deux ce sont des variables, bien que les pages de manuel puissent ne pas les décrire comme telles. Mais toujours, comme mentionné, set ne définira pas les variables shell ou les variables d'environnement). Si vous le faites,
set asdf
il définit $ 1 sur asdf, et siecho $1
vous voyez asdf. Si tu faisset a=5
il ne définira pas la variable a, égale à 5. Il définira le paramètre positionnel $ 1 égal à la chaîne de "a = 5". Donc, si vous avez déjà vu set a = 5 sous Linux, c'est probablement une erreur à moins que quelqu'un ne veuille réellement cette chaîne a = 5, dans $ 1. L'autre chose que l'ensemble de Linux peut définir, ce sont les options / attributs du shell. Si vous définissez -o, vous en voyez une liste. Et vous pouvez faire par exempleset -o verbose
, off, pour activer le bavardage (btw la valeur par défaut se trouve être désactivée mais cela ne fait aucune différence). Ou vous pouvez le faireset +o verbose
pour désactiver le bavardage. Windows n'a pas une telle utilisation pour sa commande set.la source
En termes simples, les variables d'environnement sont définies lorsque vous ouvrez une nouvelle session shell. À tout moment, si vous modifiez l'une des valeurs de variable, le shell n'a aucun moyen de sélectionner ce changement. cela signifie que les modifications que vous avez apportées deviennent effectives dans les nouvelles sessions shell. La
export
commande, quant à elle, offre la possibilité de mettre à jour la session shell en cours sur la modification que vous avez apportée à la variable exportée. Vous n'avez pas besoin d'attendre une nouvelle session shell pour utiliser la valeur de la variable que vous avez modifiée.la source
a=5
alorsecho $a
alors il dit 5. Pourtant, vous avez écrit "à tout moment si vous modifiez l'une des valeurs de variable, le shell n'a aucun moyen de choisir ce changement. Cela signifie que les changements que vous avez faits deviennent effectifs dans les nouvelles sessions du shell." . <- Alors, comment a-t-il mis à jour la session shell sans exportation. Pouvez-vous donner un exemple où l'exportation est nécessaire?