Variable d'environnement et script bash
SkillEx
-
dubcek Messages postés 19021 Statut Contributeur -
dubcek Messages postés 19021 Statut Contributeur -
Bonjour,
J'ai un problème avec un scripte en bash et les variables d'environnements de façons plus générale.
Dans le script, il y a une fonction qui doit retourner une chaine comme résultat.
Parait qu'il faut utiliser les variables d'environnement car on ne peut pas retourner n'importe quoi avec les fonctions, en bash.
Seulement le pauvre mortel que je suis ne s'en sort pas !
J'ai ajouté dans /root/.bashrc
export phrase=''
il y a bien "phrase" comme variable d'environnement.
elle est visible quant je fais #env
Ensuite dans la fonction du script le code est le suivant (dans $uneAutreVariable il y a bien une chaine de caractère)
export phrase=$uneAutreVariable
mais après la fonction, la variable d'environnement phrase est vide à nouveau, et elle l'est aussi lorsque je la visionne avec env.
Qui est-ce qui pourrait m'expliquer ce que j'ai probablement du louper ? (ce n'est pourtant pas faute d'avoir chercher et essayer)
J'ai un problème avec un scripte en bash et les variables d'environnements de façons plus générale.
Dans le script, il y a une fonction qui doit retourner une chaine comme résultat.
Parait qu'il faut utiliser les variables d'environnement car on ne peut pas retourner n'importe quoi avec les fonctions, en bash.
Seulement le pauvre mortel que je suis ne s'en sort pas !
J'ai ajouté dans /root/.bashrc
export phrase=''
il y a bien "phrase" comme variable d'environnement.
elle est visible quant je fais #env
Ensuite dans la fonction du script le code est le suivant (dans $uneAutreVariable il y a bien une chaine de caractère)
export phrase=$uneAutreVariable
mais après la fonction, la variable d'environnement phrase est vide à nouveau, et elle l'est aussi lorsque je la visionne avec env.
Qui est-ce qui pourrait m'expliquer ce que j'ai probablement du louper ? (ce n'est pourtant pas faute d'avoir chercher et essayer)
A voir également:
- Variable d'environnement et script bash
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Bingo bash free - Télécharger - Divers Jeux
- Bash do while ✓ - Forum Shell
5 réponses
hello
l'export ne va que dans un sens, du processus père aux processus enfants. Une fois modifiée, la variable disparait quand la tâche termine.
donc si cmd2 est exécuté depuis cmd1, les variables exportées par cmd1 seront visibles dans cmd2, mais si elles sont modifiées, cmd1 ne les verra pas.
l'export ne va que dans un sens, du processus père aux processus enfants. Une fois modifiée, la variable disparait quand la tâche termine.
donc si cmd2 est exécuté depuis cmd1, les variables exportées par cmd1 seront visibles dans cmd2, mais si elles sont modifiées, cmd1 ne les verra pas.
Merci pour la réponse.
C'est embêtant.
Comment faire pour que la fonction puisse retourner une valeur du coup ?
C'est embêtant.
Comment faire pour que la fonction puisse retourner une valeur du coup ?
une fonction ne créée pas un shell donc si la fonction est dans le script, ça fonctionne
$ export x=1
$ ddate () { date ; export x=2 ; }
$ echo $x
1
$ ddate
Tue Jun 25 13:43:41 CEST 2013
$ echo $x
2
$
l'export est inutile puisqu'on reste dans la même tâche
En effet l'exemple marche.
Dans mon script ça marche aussi à présent.
Merci beaucoup, ça fesait un paquet de temps que ces variables globale me faisait la vie dure .
Question subsidiaire : ça ne marchait pas, par contre, lorsque la fonction était appelée de cette façon
retour=$(maFonction arg1 arg2)
alors que la valeur était modifiée avec un export phrase="blabla" dans maFonction.
Mais ça marche directe en modifiant pour
maFonction arg1 arg2
Est-ce que tu sais pourquoi ?
Dans mon script ça marche aussi à présent.
Merci beaucoup, ça fesait un paquet de temps que ces variables globale me faisait la vie dure .
Question subsidiaire : ça ne marchait pas, par contre, lorsque la fonction était appelée de cette façon
retour=$(maFonction arg1 arg2)
alors que la valeur était modifiée avec un export phrase="blabla" dans maFonction.
Mais ça marche directe en modifiant pour
maFonction arg1 arg2
Est-ce que tu sais pourquoi ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question