Bonjour à tous,
mon script :
VAR1EXPORT=toto
export VAR1EXPORT
VAR2EXPORT=tata
export VAR2EXPORT
Exec 1:
{promt}mon_script
Exec 2:
{promt}. mon_script
Qestion
Dans le premier cas, cela ne fonctionne pas (une fois le script terminé les variables ne sont pas exporté dans le shell)
Dans le deuxième car, ça fonctionne (les variables sont présente dans le shell)
Merci de m'expliquer ou me fournir un lien vers un doc pour comprendre.
En vous remerciant d'avance.
# linuxfr et les / dans le corps du texte
Posté par NeoX . Évalué à 0 (+0/-3).
j'imagine que ton exec2 c'est en fait
./mon_script
cela n'a en fait rien à voir avec l'export
c'est le chemin de recherche (le PATH) de l'executable qui entre en jeu
en faisant
mon_script
il va chercher mon_script dans le PATH, et pas forcement dans le dossier local./mon_script
il va chercher dans le dossier courant./
[^] # Re: linuxfr et les / dans le corps du texte
Posté par geegeek . Évalué à 3 (+2/-0).
". mon_script" source le script, et apparemment l'exécute aussi.
[^] # Re: linuxfr et les / dans le corps du texte
Posté par lolop (site web personnel) . Évalué à 4 (+2/-0).
"Sourcer", c'est exécuter dans le shell courant.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# Commande source
Posté par xenom . Évalué à 4 (+2/-0).
Ça serait bien d’être plus précis, et surtout d'expliquer ce qui ne fonctionne pas.
Mais avec le contexte on peut deviner. Je suppose que tu voudrais les variables VAR1EXPORT et VAR2EXPORT accessible dans ton shell après avoir lancé ton script.
Dans le premier cas, ton script s’exécute dans un autre shell, indépendant de ton shell actuel. Donc les variables ne sont pas exportés dans ta session actuelle.
La commande
.
est un alias desource
en bash, qui exécute ton script dans ton shell courant. Si tu veux plus d'infos tu peux cherchersource bash
.# Résolu
Posté par AQkinkin . Évalué à 3 (+2/-0).
J'ai trouvé.
. est un alias de source
source est documenté.
en gros source permet de ne pas créer un nouveau processus shell pour exécuté le script (donc exécuté dans le shell courant)
[^] # Re: Résolu
Posté par Benoît Sibaud (site web personnel) . Évalué à 5 (+2/-0).
Les variables exportées sont transmises aux processus enfants, pas aux ancêtres, oncles et autres cousins éloignés.
J'ai rajouté ça à ton script :
Testons :
L'identifiant du shell / processus initial est 118671, VAR1EXPORT est initialement vide ou inexistante et VAR2EXPORT vaut "autrechose".
J'exécute le script dans un autre shell / processus (118836) et là les valeurs sont bien respectivement toto et tate.
Et si je le source, je trouve le PID initial de 118671, et il a bien écrasé la valeur de VAR1EXPORT et définie celle de VAR2EXPORT.
# ne pas confondre source (ou '.') et export
Posté par totof2000 . Évalué à 2 (+0/-0).
export mavariable
Cette commande indique que la valeur de la variable sera accessible aux processus enfants du processus shell courant.
source : le contenu du fichier passé en paramètre est évalué dans le processus shell courant ( il n'y a pas de sous-shell d'exécuté).
pas besoin de la commande source pour faire un export de variable. En pratique la commande source (ou .) permet par exemple de splitter des scripts shell en plusieurs fichiers sources contenant par exemple des fonctions ( une espèce d'include).
# La différence
Posté par gUI (Mastodon) . Évalué à 4 (+1/-0). Dernière modification le 30 novembre 2024 à 08:56.
Ton script contient des commandes (quelle qu'elles soient).
Si tu le lances comme dans la première méthode, un nouveau shell va être créé, et ce script s'exécutera dans ce nouveau shell, qui sera détruit à la fin de la commande. Si tu le lances selon la 2e méthode (avec le
.
ou la commandesource
), il sera exécuté dans le shell courant.Du coup maintenant on va s'intéresser au script.
Si ce sont des commandes externes, comme
ls
oups
par exemple ça ne changera pas grand chose. Par contre si ce sont des commandes pour modifier le shell lui-même, évidemment que ça changera ! Là tu as desexport
, qui rajoutent des variables (d'ailleurs t'aurais le même phénomène sans leexport
, rien qu'en déclarant tes variables) dans le shell, donc en effet, selon la méthode utilisée soit tu crées un shell, tu y mets ces variables et tu détruis le shell évidemment tu as tout perdu, alors que selon la 2e méthode, ces variables seront conservées dans le shell courant.Un autre exemple avec lequel tu peux jouer c'est
cd
. Selon quelle méthode d'invocation tu utilises, à la fin du script tu te seras déplacé ou pas.En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: La différence
Posté par flavien75 . Évalué à 1 (+0/-0). Dernière modification le 30 novembre 2024 à 10:07.
J'aime bien ton exemple du "cd", pour le coup c'est nettement plus parlant.
Les vrais naviguent en -42
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.