Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

(commande || exit)

23 réponses
Avatar
Thomas
bonjour :-)


je croyais que exit faisait sortir du script en toutes circonstances

mais apparemment
(commande || exit)
ne fait sortir que de la parenthèse
et c'est peut être pareil pour
`commande || exit`

comment peut on faire ?

--
j'agis contre l'assistanat, je travaille dans une SCOP !

10 réponses

1 2 3
Avatar
Stephane Chazelas
2007-10-01, 01:11(+02), Cyrille Lefevre:
T'as quoi contre if ... then ... else ? Je te suggere :

if ! netstat -rn | grep -q 192.168.1.1 ; then
exit 1
fi
osascript etc.

ou alors la meme structure que ci-dessus, utilisant $? (mais j'ai
tendance à penser que les if-then-else sont plus lisibles, donc
maintenables).


mais pas portable. "! commande", quoique posix, n'est malheureusement
pas supporté par tout les shells.
[...]


Parmi les shells "POSIX", il n'y a que les vieilles version de ksh
(par example le ksh de HPUX) qui ne le supporte pas (mais je ne
pense pas que ce shell se proclame POSIX anyway). Tous les Unix
modernes ont leur sh standard qui le supportent.

--
Stéphane


Avatar
Cyrille Lefevre
ou alors la meme structure que ci-dessus, utilisant $? (mais j'ai
tendance à penser que les if-then-else sont plus lisibles, donc
maintenables).
mais pas portable. "! commande", quoique posix, n'est malheureusement

pas supporté par tout les shells.
[...]


Parmi les shells "POSIX", il n'y a que les vieilles version de ksh
(par example le ksh de HPUX) qui ne le supporte pas (mais je ne
pense pas que ce shell se proclame POSIX anyway).


j'ai qu'un ksh88 (irix sous cygwin) sous la main.
je savais bien qu'il en existait un, mais je ne me souvenais plus lequel.
toutefois, en prod, HP existe bien, et il faut faire avec...
enfin sans ! :)

Tous les Unix
modernes ont leur sh standard qui le supportent.


euh, là, je me fache, tu veux qu'on parle du /usr/bin/sh de solaris ;^)

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.



Avatar
Alain Ketterlin
Cyrille Lefevre <cyrille.lefevre-news%
writes:

if ! netstat -rn | grep -q 192.168.1.1 ; then
exit 1
fi


mais pas portable. "! commande", quoique posix, n'est malheureusement
pas supporté par tout les shells.


Ah bon, d'accord. Mais comment on fait dans ce cas là pour inverser
une condition ? On est obligé de passer par

if ... ; then true; else exit 1; fi

? (Hors l'astuce qui consisterai ici à passer par grep -v)

-- Alain.


Avatar
Stephane Chazelas
2007-10-01, 01:38(+02), Cyrille Lefevre:
[...]
Tous les Unix
modernes ont leur sh standard qui le supportent.


euh, là, je me fache, tu veux qu'on parle du /usr/bin/sh de solaris ;^)
[...]


Ah oui, mais le sh standard de Solaris est dans /usr/xpg4/bin ou
/usr/xpg6/bin. Le /bin/sh ou /usr/bin/sh n'est la que pour
assurer la backward compatibilité pour les vieux scripts.

--
Stéphane


Avatar
Marc
Alain Ketterlin wrote:

if ! netstat -rn | grep -q 192.168.1.1 ; then
exit 1
fi


mais pas portable. "! commande", quoique posix, n'est malheureusement
pas supporté par tout les shells.


Ah bon, d'accord. Mais comment on fait dans ce cas là pour inverser
une condition ?


On utilise test (enfin "[").



Avatar
Matthieu Moy
Marc writes:

Alain Ketterlin wrote:

if ! netstat -rn | grep -q 192.168.1.1 ; then
exit 1
fi


mais pas portable. "! commande", quoique posix, n'est malheureusement
pas supporté par tout les shells.


Ah bon, d'accord. Mais comment on fait dans ce cas là pour inverser
une condition ?


On utilise test (enfin "[").


Euh, tu fais comment pour lancer une commande (comme le netstat et le
grep ci-dessus) avec « test » ?

--
Matthieu




Avatar
Marc
Matthieu Moy wrote:

Euh, tu fais comment pour lancer une commande (comme le netstat et le
grep ci-dessus) avec « test » ?


Euh ah ben j'ai peut-être répondu un peu vite... (on peut faire des trucs
sales avec un echo $? mais on cherche des trucs propres)

Avatar
Stephane Chazelas
2007-10-1, 13:12(+00), Marc:
Matthieu Moy wrote:

Euh, tu fais comment pour lancer une commande (comme le netstat et le
grep ci-dessus) avec « test » ?


Euh ah ben j'ai peut-être répondu un peu vite... (on peut faire des trucs
sales avec un echo $? mais on cherche des trucs propres)


Dans tous les cas, c'est une mauvaise idee de vouloir verifier
l'exit code de cmd dans "cmd | grep -q pattern".

Car si "pattern" est trouvé, alors grep va se terminer et "cmd"
pourra alors etre tuée par un SIGPIPE qui fera qu'elle
retournera avec un code de 141 ou quelque chose comme ca.

Sinon, voir la question 11 de la FAQ de comp.unix.shell:
http://cfaj.freeshell.org/shell/cus-faq-2.html#11

--
Stéphane


Avatar
Cumbalero

Dans tous les cas, c'est une mauvaise idee de vouloir verifier
l'exit code de cmd dans "cmd | grep -q pattern".


D'autant que le pipe ne prend que la sortie standard en entrée et qu'on
passe à coté des messages de la sortie d'erreurs.

A+
JF

Avatar
Marc
Stephane Chazelas wrote:

Dans tous les cas, c'est une mauvaise idee de vouloir verifier
l'exit code de cmd dans "cmd | grep -q pattern".


Euh je suis d'accord, mais j'imagine que là ce qui intéressait la
personne est plutôt l'exit code de grep (du coup on peut enlever l'option
-q et vérifier si la chaîne sortie par grep a une longueur 0).

1 2 3