Je suis un peu nouveau sur Linux et il se trouve que j’exécute des commandes à l’aveugle pour faire avancer les choses. Je pensais que ce ne serait pas une perte de temps de poser ce type de questions, car davantage de nouvelles personnes auraient une connaissance régulière à ce sujet.
J'ai commencé à travailler avec Jenkins récemment, puis j'ai dû utiliser cette commande export
pour exécuter le archive de guerre Jenkins . J'avais donc besoin de savoir ce que la commande export
fait en général et pourquoi nous devons l'exécuter au cours de l'exécution de Jenkins (une fois que la maison de Jenkins est définie).
Merci!
export
dans sh
et les shells associés (tels que bash
) marquent l’exportation d’une variable d’environnement aux processus enfants, de sorte que l'enfant en hérite.
export
est défini dans POSIX :
L'environnement de ligne de commande doit attribuer l'attribut d'exportation aux variables correspondant aux noms spécifiés, ce qui les place dans l'environnement des commandes exécutées ultérieurement. Si le nom d'une variable est suivi de = Word, la valeur de cette variable doit être définie sur Word.
Je suppose que vous venez d'un fond de fenêtres. Je vais donc les contraster (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 inclut une variable définie dans le cmd Shell à l'aide de la commande SET, ainsi que lorsque la variable est définie dans l'interface graphique de Windows, ainsi définie dans le registre et devient visible dans les nouvelles fenêtres de la cmd. par exemple. 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ètre, set affiche les paramètres d'environnement actuels. " Sous Linux, set n’affiche pas les variables d’environnement, il affiche les variables Shell qu’il n’appelle pas/ne désigne pas comme variables d’environnement. En outre, 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 note à la fin), uniquement pour les afficher et même dans ce cas uniquement pour afficher les variables de Shell. Windows utilise set pour définir et afficher, par exemple, définir a = 5, linux ne le fait pas.
Sous Linux, je suppose que vous pouvez créer un script définissant des variables au démarrage, par exemple. /etc/profile
ou /etc/.bashrc
mais sinon, ils ne sont pas permanents. Ils sont stockés dans la RAM.
Il existe une distinction dans Linux entre les variables Shell et les variables d’environnement. Sous Linux, les variables Shell ne figurent que dans le shell actuel et les variables d'environnement, dans ce shell et tous les shells enfants.
Vous pouvez afficher les variables Shell avec la commande set
(bien que, contrairement aux fenêtres, les variables ne soient pas définies sous linux avec la commande set).
set -o posix; set
(faire ce set -o posix une première fois, aide à ne pas afficher trop de choses inutiles). Donc, set
affiche les variables du shell.
Vous pouvez afficher les variables d'environnement avec la commande env
Les variables shell sont définies avec, par exemple. juste a = 5
les variables d'environnement sont définies avec export, export 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 de set
mais ne s'affiche pas en tant que variable d'environnement.
Nous voyons ici yyy défini avec export, il s’agit donc d’une variable d’environnement. Et voyez-le sous les variables d'environnement et de shell
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
d'autres discussions utiles
https://unix.stackexchange.com/questions/176001/how-can-i-list-all-Shell-variables
https://askubuntu.com/questions/26318/environment-variable-vs-Shell-variable-whats-the-difference
Note - Un point qui explique un peu et corrige quelque peu ce que j'ai écrit, est que, sous Linux bash, 'set' peut être utilisé pour définir les "paramètres de position" et les "options/attributs du shell", et techniquement les deux ce sont des variables, bien que les pages de manuel ne les décrivent pas nécessairement. Cependant, comme indiqué précédemment, set ne définira pas les variables d'environnement ou d'environnement). Si tu fais set asdf
puis il fixe $ 1 à asdf, et si vous faites echo $1
vous voyez asdf. Si tu fais set a=5
il ne définira pas la variable a, égale à 5. Il définira le paramètre de position $ 1 égal à la chaîne de "a = 5". Donc, si vous avez déjà vu définir a = 5 dans linux, c'est probablement une erreur, à moins que quelqu'un 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 exemple set -o verbose
, off, pour activer le verbose (au fait, la valeur par défaut est désactivée, mais cela ne fait aucune différence). Ou vous pouvez faire set +o verbose
pour désactiver les commentaires. Windows ne dispose pas d'un tel usage pour sa commande set.
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 choisir cette modification. cela signifie que les modifications que vous avez apportées deviennent effectives dans les nouvelles sessions Shell. La commande export
, en revanche, offre la possibilité de mettre à jour la session Shell en cours en fonction des modifications apportées à la variable exportée. Vous n'avez pas besoin d'attendre la nouvelle session Shell pour utiliser la valeur de la variable que vous avez modifiée.