"introduire" une variable dans un sous script

Le
Thomas
bonjour :-)


j'ai cru comprendre que c'est possible d'"introduire" une variable dans
un sous script,
cad qu'on indique le contenu de la variable au moment de lancer le
script,
de sorte que quand le script démarre, il a deja cette variable qui existe

comment on fait ça en sh, svp ? :-)


(je compte tjr pas me lancer dans la programmation poussée en sh, j'en
ai besoin dans un cas très particulier)

ps :
j'ai bien lu toutes vos réponses à mes msg précédents, mais j'ai pas
encore tout digéré ;-)
merci :-)

--
j'agis contre l'assistanat, je travaille dans une SCOP !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #774906
2007-10-07, 15:50(+02), Thomas:
[...]
j'ai cru comprendre que c'est possible d'"introduire" une variable dans
un sous script,
cad qu'on indique le contenu de la variable au moment de lancer le
script,
de sorte que quand le script démarre, il a deja cette variable qui existe

comment on fait ça en sh, svp ? :-)


(je compte tjr pas me lancer dans la programmation poussée en sh, j'en
ai besoin dans un cas très particulier)
[...]


var=value ./ton-script

On passe par une variable d'environnement. Les shells
initialisent des variables shell pour chaque variable
d'environnement dont le nom est au bon format (contient lettres
et chiffres et _ et ne commencant pas par un chiffre).

--
Stéphane

Thomas
Le #774905
In article
Thomas
j'ai cru comprendre que c'est possible d'"introduire" une variable dans
un sous script,
cad qu'on indique le contenu de la variable au moment de lancer le
script,
de sorte que quand le script démarre, il a deja cette variable qui existe

comment on fait ça en sh, svp ? :-)


(je compte tjr pas me lancer dans la programmation poussée en sh, j'en
ai besoin dans un cas très particulier)



précision :

j'exécute
make setup build install
et lui il lit des variables dans un fichier de config

je vais demander à l'auteur de tout ça qu'il fasse en sorte que la
variable ne soit modifiée que si elle n'existe pas

est ce que on peut demander à make d'avoir une variable des le départ,
comme ça ?

--
j'agis contre l'assistanat, je travaille dans une SCOP !

Thomas
Le #774904
In article Stephane Chazelas
2007-10-07, 15:50(+02), Thomas:
[...]
j'ai cru comprendre que c'est possible d'"introduire" une variable dans
un sous script,
cad qu'on indique le contenu de la variable au moment de lancer le
script,
de sorte que quand le script démarre, il a deja cette variable qui existe

comment on fait ça en sh, svp ? :-)


(je compte tjr pas me lancer dans la programmation poussée en sh, j'en
ai besoin dans un cas très particulier)
[...]


var=value ./ton-script


merci :-)


On passe par une variable d'environnement. Les shells
initialisent des variables shell pour chaque variable
d'environnement dont le nom est au bon format (contient lettres
et chiffres et _ et ne commencant pas par un chiffre).


qq c'est deja, une variable d'environnement ?

je croyais que c'était une variable pour laquelle on fait
export var
et que ça la rendais accessible par tous les processus, même ceux qui
n'ont rien avoir avec le processus qui fait le export

mais moi j'ai besoin que INSTALL soit accessible par make, et peut être
par ses fils, mais pas par les autres
c'est ça que ça fait, ce que tu m'as dit ?

--
j'agis contre l'assistanat, je travaille dans une SCOP !


Mihamina Rakotomandimby
Le #774537
Thomas wrote:

qq c'est deja, une variable d'environnement ?


"qu'est-ce que"!

je croyais que c'était une variable pour laquelle on fait
export var


Mais en moins rigoureux (et si j'interprete la réponse de Stéphane), on
appelle variable d'environnement toute variable que le script en cours
(qu'on nommera le "contexte") considère comme ayant une signification,
qu'elle soit initialisée ou pas.
Elles peuvent etre initialisées avec un export ou d'une autre façon.

Stephane Chazelas
Le #774535
2007-10-07, 17:41(+02), Thomas:
[...]
var=value ./ton-script


merci :-)


On passe par une variable d'environnement. Les shells
initialisent des variables shell pour chaque variable
d'environnement dont le nom est au bon format (contient lettres
et chiffres et _ et ne commencant pas par un chiffre).


qq c'est deja, une variable d'environnement ?


L'environnement est une liste de "var=value"s passee a
l'execution d'une commande. Un peu comme les arguments sauf que
par convention, les commandes passent aux commandes qu'elles
executent les memes variables que celles qu'elle a recu quand on
l'a executee. Ce qui fait que l'environnement est quelque chose
qui s'herite de commande a commande.

je croyais que c'était une variable pour laquelle on fait
export var


L'environnement n'est pas un concept specifique au shell. En
shell, on fait un "export var" pour convertir une variable shell
en variable d'environnement, c'est a dire dire au shell de
rajouter "var=sa-value" a l'environnement qui sera passé aux
commandes futures.

et que ça la rendais accessible par tous les processus, même ceux qui
n'ont rien avoir avec le processus qui fait le export


Dans

var=value cmd

"var=value" est rajouté a l'environnement qui est passé a "cmd"
uniquement. Evidemment, "cmd" est libre (et ne s'en prive pas en
general) de passer cette variable aux commandes qu'elle
executera.

mais moi j'ai besoin que INSTALL soit accessible par make, et peut être
par ses fils, mais pas par les autres
c'est ça que ça fait, ce que tu m'as dit ?


make a des variables aussi. awk a des variables, le shell a des
variables. Ne pas croire que ces variables se trouvent
automagiquement converties entre elles.

Par defaut, make se sert aussi des variables d'environnement
pour initialiser ses variables a lui (les $(INSTALL)). Make peut
aussi lancer des shells qui peuvent utiliser des variable shell.

Dans

target:
rm $(INSTALL)/file


C'est une variable de make (l'expansion est faite par make avant
de lancer le shell qui lancera la commande rm). Dans

target:
rm "$$INSTALL/file"

make execute la commande shell rm "$INSTALL/file" et la le shell
expandera *sa* variable $INSTALL.

INSTALL=whatever make target

fera en sorte que la variable $(INSTALL) de make ansi que les
variables $INSTALL des eventuels lancés par make soient
*initialisees* a "whatever".

make target INSTALL=whatever

est une maniere de donner a make une valeur specifique a une de
*ses* variables qui prendra le dessus sur celles definies dans
le Makefile, et avec au moins le make de GNU, ca a aussi pour
consequence de creer la variable d'environnement correspondante
(c'est a dire que make passera "INSTALL=whatever" dans
l'environnement des commandes (en particulier des shells) qu'il
executera).

--
Stéphane


Publicité
Poster une réponse
Anonyme