Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/02/2011, à 13:53

YannUbuntu

[Résolu] Modifier une variable dans une fenêtre de progression

Bonjour
Voici un petit exemple du soucis que j'ai :

#!/bin/sh
a=1
(a=2; sudo os-prober) | tee >(zenity --progress --pulsate)
echo "$a"
exit 0

Dans ce cas, echo "$a" me retourne 1. Comment faire pour qu'il me retourne 2 (c'est-a-dire qu'il prenne en compte les opérations réalisées pendant l'exécution de la fenêtre de progression) ?

Dernière modification par YannUbuntu (Le 15/02/2011, à 02:14)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#2 Le 14/02/2011, à 14:30

erpiu

Re : [Résolu] Modifier une variable dans une fenêtre de progression

Bonjour,

Je remplacerai les parenthèses par des accolades pour que l'exécution se fasse dans le même environnement shell, conformément au man bash dont voici un extrait :

Compound Commands
       A compound command is one of the following:

       (list) list  is  executed  in  a  subshell  environment  (see   COMMAND
              EXECUTION  ENVIRONMENT below).  Variable assignments and builtin
              commands that affect the shell's environment do  not  remain  in
              effect  after  the  command completes.  The return status is the
              exit status of list.

       { list; }
              list is simply executed in the current shell environment.   list
              must  be  terminated with a newline or semicolon.  This is known
              as a group command.  The return status is  the  exit  status  of
              list.   Note that unlike the metacharacters ( and ), { and } are.............

Cela donnerait donc :

#!/bin/sh
a=1
{a=2; sudo os-prober ; } | tee >(zenity --progress --pulsate)
echo "$a"
exit 0

Hors ligne

#3 Le 14/02/2011, à 14:57

Totor

Re : [Résolu] Modifier une variable dans une fenêtre de progression

Cela ne changera rien...
l'utilisation du | (lire pipe) génère 2 sous processus et donc une portée de variable local à ces processus.
il faut donc utiliser la substitution de processus :

#!/bin/sh
a=1
{ a=2; sudo os-prober ; } > >(tee >(zenity --progress --pulsate))
echo "$a"
exit 0

Dernière modification par Totor (Le 14/02/2011, à 14:58)


-- Lucid Lynx --

Hors ligne

#4 Le 14/02/2011, à 17:48

erpiu

Re : [Résolu] Modifier une variable dans une fenêtre de progression

Autant pour moi! La prochaine, je testerai plutôt deux fois qu'une avant d'affirmer des choses.... wink
En tous cas, merci à toi Totor. J'ai ainsi découvert la substitution de processus qui va me permettre de simplifier quelques uns de mes scripts!

Hors ligne

#5 Le 15/02/2011, à 02:16

YannUbuntu

Re : [Résolu] Modifier une variable dans une fenêtre de progression

Impeccable, merci à vous 2 !

(juste un détail pour les débutants qui nous liraient : ne pas oublier le point virgule à la fin de l'accolade wink )

[Résolu]


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne