Comment retarder l'exécution d'une partie d'un script shell ?

Einbert

Membre expert
Club iGen
24 Avril 2001
1 239
20
Bonjour,

Voilà le problème : pour attribuer une valeur à une variable d'un script shell, je dois exécuter une commande qui doit chercher des informations sur un serveur distant, puis ces informations passent à travers 2 filtres pour que j'obtienne ce que je veux. Le problème c'est que comme la commande prend 2-3 secondes à obtenir l'info et que le script n'attend pas que cette variable ait effectivement une valeur, ce qui fait que le reste du script utilise une valeur de la variable qui est encore vide... Vous me suivez ? Donc comment faire pour retarder l'exécution du reste script, resp.que le script ne continue qu'une fois que la variable ait effectivement une valeur ? Je me suis dit qu'un sleep 20 après l'initialisation de la variable ferait l'affaire, mais cela ne change rien, variable toujours vide ! Comme il me semble qu'il n'y a pas moyen de forker dans un script shell ... J'ai même essayé avec un
while($#arg == 0)
.......
end

rien à faire. La commande qui attribut la valeur à la variable fonctionne pourtant sans problèmes si je l'exécute...

Une idée ?

++
 
  • J’aime
Réactions: [MGZ] Black Beru
Hello,
C'est pas normal ca...
Si tu fais comme ca :
Bloc de code:
LS="`ls /`"
Les instructions après ton LS ne seront pas exécutées tant que la variable LS ne sera pas remplie (en fait tant que le ls / ne sera pas exécuté).
Essaye en lancant ta commande de cette manière TAVARIABLE="`ta commande`" et le script ne devrait pas continuer tant que ta commande n'est pas exécutée.

A+
 
Je vais essayé ça ...
Cela vient peut-être du fait que j'utilise

set qwer = `my_cmd very long`

au lieu de

set qwer = "`my_cmd very long`"

En fait, je ne savais pas qu'il y avait une différence entre les deux ... Je viens de faire un test pour m'en rendre compte :

set qwer = `ls /`
echo $#qwer
26

puis avec le bon truc

set qwer = "`ls /`"
echo $#qwer
24

En fait il traite les deux traitent les espaces comme séparateur... Vous allez me dire, oui, logique, mais le problème de l'exemple vient du fait qu'il y a deux noms de dossier qui possède un nom avec un espace (pour ne citer que Desktop DB et Desktop DF ... Donc j'ai hâte d'essayer cela demain
laugh.gif
...

++