[bash] variables dans fonction arrière plan
Résolu/Fermé
gogy
Messages postés
5
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
5 juin 2011
-
3 juin 2011 à 21:58
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 5 juin 2011 à 09:11
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 5 juin 2011 à 09:11
A voir également:
- [bash] variables dans fonction arrière plan
- Arrière plan - Guide
- Fonction si et - Guide
- Flouter arrière-plan appel vidéo whatsapp android - Guide
- Arriere plan pc - Guide
- Youtube en arrière plan - Guide
2 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
4 juin 2011 à 11:02
4 juin 2011 à 11:02
Salut,
Extrait de man bash :
Extrait de "Guide avancé d'écriture des scripts Bash" :
A part coller tes variables dans un fichier et sourcer celui-ci par la suite, je ne vois pas trop comment faire ;-\
;-((
Extrait de man bash :
Si une commande se termine par l'opérateur de contrôle &, l'interpréteur l'exécute en arrière-plan, dans un sous-shell.
Extrait de "Guide avancé d'écriture des scripts Bash" :
Un script peut ne pas faire un export de ses variables à son processus parent, le shell ou à l'environnement. Comme nous l'avons appris en biologie, un processus fils peut hériter de son parent, mais le contraire n'est pas vrai.
A part coller tes variables dans un fichier et sourcer celui-ci par la suite, je ne vois pas trop comment faire ;-\
;-((
gogy
Messages postés
5
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
5 juin 2011
2
4 juin 2011 à 15:07
4 juin 2011 à 15:07
Salut zipe31
Merci de ta réponse, je suis passé par l'écriture dans un fichier ne voyant pas d'autre solution (on a eu la même idée :) en plus, ça me sert de fichier de log donc c'est au poil.
Cependant la fonction export fonctionne, je l'ai testé. Peut-être pas dans tous les cas...
Merci encore !
Merci de ta réponse, je suis passé par l'écriture dans un fichier ne voyant pas d'autre solution (on a eu la même idée :) en plus, ça me sert de fichier de log donc c'est au poil.
Cependant la fonction export fonctionne, je l'ai testé. Peut-être pas dans tous les cas...
Merci encore !
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
4 juin 2011 à 15:09
4 juin 2011 à 15:09
Re-
Non la fonction export ne marche pas si la fonction est lancée en arrière-plan ;-(
Non la fonction export ne marche pas si la fonction est lancée en arrière-plan ;-(
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
4 juin 2011 à 15:16
4 juin 2011 à 15:16
De plus dans une fonction, les variables sont globales nativement (enfin pour le shell appelant), il faut les déclarer avec l'option "typeset" pour qu'elles ne soient pas exportées...
gogy
Messages postés
5
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
5 juin 2011
2
5 juin 2011 à 00:29
5 juin 2011 à 00:29
#!/bin/bash fonction() { export variable="ceci est ma variable modifiee" } variable="c'est est ma variable" echo $variable fonction echo $variable
Ceci fonctionne !
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
5 juin 2011 à 09:11
5 juin 2011 à 09:11
Salut,
Bon je vais re-expliquer ici ce que je t'ai dit ailleurs...
Les variables d'une fonction sont globales par défaut, il faut les déclarer implicitement avec l'option "typeset" pour qu'elles aient une portée locale et non globale.
De plus, si la fonction est lancée en arrière-plan, elle est lancée dans un sous-shell et comme l'a si bien dit N_Bah*, elles ne peuvent en aucun cas être rattachées au shell parent.
La preuve :
* Membre sur un autre forum
Bon je vais re-expliquer ici ce que je t'ai dit ailleurs...
Les variables d'une fonction sont globales par défaut, il faut les déclarer implicitement avec l'option "typeset" pour qu'elles aient une portée locale et non globale.
De plus, si la fonction est lancée en arrière-plan, elle est lancée dans un sous-shell et comme l'a si bien dit N_Bah*, elles ne peuvent en aucun cas être rattachées au shell parent.
La preuve :
$ cat brol.sh #!/bin/bash fonction() { variable="ceci est ma variable modifiee" } fonction_bis() { variable2="ceci est ma variable2 modifiee" } variable="c'est ma variable" echo Avant la fonction : $variable fonction echo Après la fonction : $variable fonction& variable2="c'est ma variable2" echo Avant la fonction_bis : $variable2 fonction_bis& echo Après la fonction_bis : $variable2 $ ./brol.sh Avant la fonction : c'est ma variable Après la fonction : ceci est ma variable modifiee Avant la fonction_bis : c'est ma variable2 Après la fonction_bis : c'est ma variable2
* Membre sur un autre forum