Citation
cedric b
Bonjour,
Et bien voila, a ma grande surprise, on ne peut a
priori pas ajouter une nouvelle variable
d'environnement dans un script shell executable.
Voici ce que j'entends par la:
Contenu de scipt.sh:
#! /bin/sh
# code...
export MA_VAR=$1
Appel de script.sh
$./script.sh donnees
$echo ma_var=$MA_VAR
ma_var=
Si je lis bien cet exemple, tu as un script qui vrée une variable "MA_VAR".
Ensuite, tu lances le script
Enfin tui affiche le contenu de "MA_VAR" et, ô surprise, MA_VAR est vide !
Eh ben c'est normal
1) quand tu lances un script, tu ouvres un sous processus (un fils de ton shell courant) et c'est le fils qui va exécuter le script. Ce système permet les pipe et les commandes en arrière plan... mais quand le fils se termine, toutes les variables créées dans le fils sont supprimées
2) la commande "export" permet d'exporter une variable vers un fils. C'est à dire que si tu tapes "export nom=cedric" et que tu lances un script qui fasse "echo $nom" tu auras "cedric" affiché.
Toi, tu cherches à l'exporter vers le père et ça c'est impossible.
Solution pour contourner le problème
1) tu crées un script "script.sh" qui fait plein de choses mais qui ne fasse qu'un seul "echo $MA_VAR". Aucun autre echo ne doit être dans ce script
2) tu appelles ensuite ton script da la façon suivante: MA_VAR=`./script.sh donnees`
Autre solution
Tu laisses ton script tel que tu l'as écrit au début de ce topic mais tu l'appelles de la façon suivante: . ./script donnees
La syntaxe ". pgm" demande au shell de ne pas créer de fils pour exécuter "pgm". L'inconvénient, c'est que si, dans "pgm" tu as un "exit" qui est présent, ben ça te déconnecte
Citation
cedric b
voila, en fait j'ai besoin d'un "truc" qui prenne
en parametre une donnee, qui sera incluse dans une
variable d'environnement et qui permette aussi d
effectuer des calculs.
hum...
Citation
cedric b
garg... pas facile a expliquer
ce qui se conçoit bien ...
Citation
cedric b
mais si vous voyez ce que je veux dire, pourriez
vous m'aider svp. ca doit pas etre bien complique
je suppose
Je vais essayer de traduire ce que j'ai compris...
Tu as besoin d'un script qui fasse un calcul sur une donnée que tu lui passe en paramètre et qui stocke ce calcul dans une variable d'environnement dans ton shell de travail. Si c'est bien ça, alors pas trop de soucis
Contenu du script
#!/bin/sh
...
...
gros calcul
...
echo "$resultat_final"
# Fin du script (aucun autre echo dans le script)
Appel du script
export MA_VAR=`./script.sh donnee`
Et voilà...