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
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 faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 . shellA.ksh # si shell a fait un export VAR_RETOURA VAR_RETOURB=VAR_RETOURA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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`
Partager