| Qui est en ligne ? |
| Il y a : 29 utilisateurs en ligne, consultez le détail |
Forum » Serveur, Réseaux et Programmation » Bash : portée de la modification de variables |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#0 Message posté le : 01-06-2007 à 23:19:21 |
Naboo Forum : Modérateur Association : Président Arrivé(e) le : 09-04-2006 Nombre de messages : 2379 |
Bonsoir tlm, j'ai un petit problème en Bash : CAN_OVERRIDE=
function can_override_test() {
CAN_OVERRIDE=can
${RSYNC} -r ${*} | while read line; do
date=$(date -d "$(echo $line | cut -f 3,4 -d \ )" +%s)
test $date -ge ${LAST_SYNC} && (
CAN_OVERRIDE=cannot
echo $line 1>&2
)
done
echo "${CAN_OVERRIDE}" # <- tjr "can"
}En fait, la modification de CAN_OVERRIDE ne tient pas, elle reprend sa valeur "can" au niveau du echo (alors que je suis bien passé dans l'alternative et qu'elle a bien été modifée). Je ne vois pas comment contourner ce problème. J'ai essayer de virer les parenthèses mais rien. Je me demande si ça ne vient pas du pipe. Exporter la variable n'y fait rien non plus. Avez-vous des idées de la manière que je pourrais utiliser pour contourner ce problème ? J'aimerais éviter le fichier... ------------------------------------- Tu as envie de t'impliquer ? Avec ton aide et tes compétences (je te vois, sourire... tu te sous-estimes !) nous pourrons bâtir la communauté Trustonme. Tu ne sais pas par où commencer ? Viens faire un tour dans la catégorie Association Trustonme. |
|
|
#1 Message posté le : 01-06-2007 à 23:56:33 |
Naboo Forum : Modérateur Association : Président Arrivé(e) le : 09-04-2006 Nombre de messages : 2379 |
En attendant mieux, j'ai résolu le problème comme ceci : CAN_OVERRIDE=
function can_override_test() {
CAN_OVERRIDE=can
CAN_OVERRIDE_FTMP=`mktemp`
${RSYNC} -r ${*} | while test "${CAN_OVERRIDE}" != "${BREAKER}" && read line; do
date=$(date -d "$(echo $line | cut -f 3,4 -d \ )" +%s)
test $date -ge ${LAST_SYNC} &&
rm -f "${CAN_OVERRIDE_FTMP}" &&
CAN_OVERRIDE=cannot &&
echo $line 1>&2
done
test -f "${CAN_OVERRIDE_FTMP}" && rm -f "${CAN_OVERRIDE_FTMP}" || CAN_OVERRIDE=cannot
}------------------------------------- Tu as envie de t'impliquer ? Avec ton aide et tes compétences (je te vois, sourire... tu te sous-estimes !) nous pourrons bâtir la communauté Trustonme. Tu ne sais pas par où commencer ? Viens faire un tour dans la catégorie Association Trustonme. |
|
|
#2 Message posté le : 31-05-2009 à 21:02:38 |
Naboo Forum : Modérateur Association : Président Arrivé(e) le : 09-04-2006 Nombre de messages : 2379 |
Je viens de retomber sur ce post par hazard. Pour l'info, c'était bien le pipe qui posait le soucis : il entraîne la création d'un sous-shell, tout comme les parenthèses. J'aurais pû supprimer le pipe en redirigeant la sortie de rsync dans un fichier puis en utilisant ce fichier comme entrée du while :
... rsync... > monfichier while...; do... done < monfichier Cela fait perdre le parallèlisme. Pour le retrouver, on pourrait utiliser des tubes nommés ou d'autres formes de redirections et lancer rsync tache de fond ; le while doit, lui, absolument rester dans le même process que le script, sinon il ne pourra pas modifier de variables. --Message édité par Azollyx le 31-05-2009 à 21:03:42-- ------------------------------------- Tu as envie de t'impliquer ? Avec ton aide et tes compétences (je te vois, sourire... tu te sous-estimes !) nous pourrons bâtir la communauté Trustonme. Tu ne sais pas par où commencer ? Viens faire un tour dans la catégorie Association Trustonme. |
| Page : [1] |
Forum » Serveur, Réseaux et Programmation » Bash : portée de la modification de variables |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages