VAR="AAA" ls | while read rep do VAR=${rep} echo "Dans le while : ${VAR}" done echo "Hors while : ${VAR}
Dans le while : rep1 Dans le while : rep2 Hors while : AAA
VAR="AAA" for rep in `ls` do VAR=${rep} echo "Dans le for : ${VAR}" done echo "Hors for : ${VAR}
Dans le for : rep1 Dans le for : rep2 Hors for : rep2
VAR="AAA" for rep in `ls` do ( VAR=${rep} echo "Dans le for : ${VAR}" ) done echo "Hors for : ${VAR}
VAR="AAA" ps -C sh ls | while read rep do VAR=${rep} echo "Dans le while : ${VAR}" ps -C sh done echo "Hors while : ${VAR}" ps -C sh
Citation
Fanch
c'est bien ce que j'avais suspecté ; mais du coup
c'est grave pénible parce que c'est impossible
d'utiliser une structure while pour faire ce genre
de magouille.
rhalala ! tout ça, ça vaut pas un bon script
python !!!
#!/bin/sh VAR="AAA" for rep in `ls` do VAR=${rep} echo "Dans le for : ${VAR}" export VAR done echo "Hors for : ${VAR}"
#!/bin/sh VAR="AAA" pointeur=VAR echo ${VAR} echo ${!pointeur}
VAR="AAA" ls | ( while read rep do VAR=${rep} echo "Dans le while : ${VAR}" done echo "Hors while : ${VAR}" )
ah pas con ! mais bon, c'est un peu lourdingue aussi donc je vais rester sur le for. Merci pour le ${!pointeur} ! :-)Citation
oudoubah
A avoir des variables qui puissent changer dans des sous-shell, j'utiliserai un fichier contenant les variables, que je modifierais à coup de sed
(soyons bourrin), et que je "sourcerais" à chaque fois après les appels aux sous-shell qui modifient les variables.
ouais d'accord mais bon, tu ne fais que déplacer le problème en intégrant l'ultime echo dans le sous-shell généré par le pipe. Dans mon vrai script, le dernier echo c'est 1400 lignes ... (je porte du dcl d'openvms vers bash et j'ai pas fondamentalement le temps de reprendre la structure des scripts).Citation
chromosome
Avec des parenthèses
Citation
Fanch
ouais d'accord mais bon, tu ne fais que déplacer
le problème en intégrant l'ultime echo dans le
sous-shell généré par le pipe. Dans mon vrai
script, le dernier echo c'est 1400 lignes
#!/bin/sh work() { ( ls | ( while read ligne do <.... traitement de $ligne ....> done echo "le truc final qu'il faut afficher" ) ) } <... travail normal de 1400 ligne ...> work # ou bien resultat=`work` # Fin du script