Comportement bizzare sur test du resultat d'une ligne de script

Comportement bizzare sur test du resultat d'une ligne de script - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 27-05-2004 à 08:58:30    

Salut
 
Encore moi... Faut dire que les scripts en ce moment j'en mange un peu  :pt1cable:  
 
J'ai une ligne qui me fait un comportement bizarre :
 
./build && echo "Error, value : $?" ; exit 1
 
Normalement, avec d'autres commandes avec le &&, tout se passe bien (enfin il me semble) : si les commandes passent pas de soucis, sinon le message d'erreur s'affiche et le programme s'arrete.
 
Cependant, j'ai une commande avec laquelle ca ne marche pas, voila ce que ca fait :
Error, value : 0  :ouch:  
 
Sachant que 0 est le "code retour normal", je vois mal comment l'echo "Error.." peut s'afficher...
 
Pour info, si je lance le ./build dans un shell puis qu'a la ligne suivante je fais $?, j'obtiens aussi "bash: 0". Bref, normalement mon script ./build marche (il en a toutes les apparences du moins !).  
 
Je precise aussi que le script est un peu long, ca peut peut etre influence le && ?
 
J'espere que vous m'avez compris et que vous pouvez me dire pourquoi j'ai ce resultat assez incoherent pour moi !
 
Merci d'avance !
++
ZedroS

Reply

Marsh Posté le 27-05-2004 à 08:58:30   

Reply

Marsh Posté le 27-05-2004 à 10:42:25    

tu confonds && et || ;)
commande 1 && commande2 : commande 2 s'exécute seulement si commande1 s'est terminée correctement (code de retour 0) !

Reply

Marsh Posté le 28-05-2004 à 01:22:38    

Arg... Trop con moi !
 
Ben, euh, merci bcp !

Reply

Marsh Posté le 28-05-2004 à 03:31:25    

Puis c'est pas le seul problème : avec ta ligne tu sortira toujours avec un exit code de 1, même en cas de succès. Ce qui est après le « ; » est en effet toujours exécuté. Tu peux soit utiliser un beau if then fi, soit mettre des accolades :

./build || { echo "Error, value : $?" ; exit 1 }

Reply

Marsh Posté le 01-06-2004 à 05:57:19    

Va pour les accolades !
 
Encore merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed