J'ai 2 programmes bash shell A et B.
A appelle B,
B travaille sur une variable V.
Comment faire pour que A recupére la valeur V traitée dans B?
Merci
Version imprimable
J'ai 2 programmes bash shell A et B.
A appelle B,
B travaille sur une variable V.
Comment faire pour que A recupére la valeur V traitée dans B?
Merci
Salut,
Je pense qu'en shell classique ceci n'est pas possible.
Par contre en ksh si je mes souvenirs sont bon
tu peu retourner une valeur " return 5" meme a l'exterieur d'une fonction
avec le sh
ou encore dans le script A : exit 5
et dans le deusieme script tu fait resultat=$(exec(scriptA.sh))
J'ajouterais que le code retour est compris entre 0 et 255.
Une autre solution permet d'outrepasser ces limites en exportant la variable dans l'environnement, en executant le shell A dans l'instance du shell B.
Ce qui donnerait :
en ksh, sinon en bash il me semble qu'il faut faireCode:
1
2
3
4 . shellA.ksh # si shell a fait un export VAR_RETOURA VAR_RETOURB=VAR_RETOURA
Code:
1
2
3 source shellA.ksh VAR_RETOURB=VAR_RETOURA
Attention, les enfants : le code de retour sert à donner des informations d'état (le programme s'est bien passé, il y a eu une erreur X, etc.), pas à renvoyer le résultat d'un traitement. Quand tout se passe bien, le code de retour attendu est 0. Si ce n'est pas 0, c'est qu'il y a eu un pb. Chaque script utilise alors un code > 0 pour indiquer le type d'erreur de son choix.
La façon classique de récupérer le résultat d'une commande c'est de passer par la sortie standard, exactement comme on le fait pour toutes les commandes classiques Unix. Exemple :
B :
A :Code:
1
2
3
4
5 #!/bin/bash # On envoi le resultat sur la sortie standard echo $((1+2)) # et surtout pas exit $((1+2)) !!
Code:
1
2
3
4
5 #!/bin/bash ... # On lance le traitement de B et on recupere le resultat sur l'entree standard resultat_b=`B`
Ah oui ca c'est clairement plus propre = )