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).
if ! cmd | grep -q whatever; then ...
marchera avec tous les sh POSIX et tous les Unix de moins de 15 ans possedent un tel shell.
Si on veut etre Bourne compatible on peut faire
if cmd | grep -q whatever; then : else ... fi
ou
cmd | grep -q whatever || ...
Ou
cmd | grep -q whatever if [ "$?" -ne 0 ]; then ...
ou
not() { eval "$@" [ "$?" -ne 0 ] }
if not "cmd | grep -q whatever"; then ...
-- Stéphane
2007-10-1, 13:43(+00), 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).
if ! cmd | grep -q whatever; then ...
marchera avec tous les sh POSIX et tous les Unix de moins de 15
ans possedent un tel shell.
Si on veut etre Bourne compatible on peut faire
if cmd | grep -q whatever; then
:
else
...
fi
ou
cmd | grep -q whatever || ...
Ou
cmd | grep -q whatever
if [ "$?" -ne 0 ]; then ...
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).
if ! cmd | grep -q whatever; then ...
marchera avec tous les sh POSIX et tous les Unix de moins de 15 ans possedent un tel shell.
Si on veut etre Bourne compatible on peut faire
if cmd | grep -q whatever; then : else ... fi
ou
cmd | grep -q whatever || ...
Ou
cmd | grep -q whatever if [ "$?" -ne 0 ]; then ...
ou
not() { eval "$@" [ "$?" -ne 0 ] }
if not "cmd | grep -q whatever"; then ...
-- Stéphane
Stephane Chazelas
2007-10-01, 01:38(+02), 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 ! :) [...]
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui regisse ksh donc aucune guarantie. En production, on n'utilise pas ksh pour ecrire des scripts portables. On utilise sh. Le sh d'HPUX, qui est different du ksh d'HPUX, est basé sur une version plus recente de ksh et est POSIX, donc supporte ! comme tous les sh POSIX de tous les systemes.
-- Stéphane
2007-10-01, 01:38(+02), 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 ! :)
[...]
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui
regisse ksh donc aucune guarantie. En production, on n'utilise
pas ksh pour ecrire des scripts portables. On utilise sh. Le sh
d'HPUX, qui est different du ksh d'HPUX, est basé sur une
version plus recente de ksh et est POSIX, donc supporte ! comme
tous les sh POSIX de tous les systemes.
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 ! :) [...]
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui regisse ksh donc aucune guarantie. En production, on n'utilise pas ksh pour ecrire des scripts portables. On utilise sh. Le sh d'HPUX, qui est different du ksh d'HPUX, est basé sur une version plus recente de ksh et est POSIX, donc supporte ! comme tous les sh POSIX de tous les systemes.
-- Stéphane
Cyrille Lefevre
2007-10-01, 01:38(+02), Cyrille Lefevre:
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui regisse ksh donc aucune guarantie. En production, on n'utilise pas ksh pour ecrire des scripts portables. On utilise sh. Le sh
c'est effectivement le cas, j'utilise bien sh :)
d'HPUX, qui est different du ksh d'HPUX, est basé sur une version plus recente de ksh et est POSIX, donc supporte ! comme tous les sh POSIX de tous les systemes.
jamais fait attention à ce détail ! mais c'est bon de le savoir :) par habitude, j'ai éliminé le "! cmd" de mon language...
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
2007-10-01, 01:38(+02), Cyrille Lefevre:
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui
regisse ksh donc aucune guarantie. En production, on n'utilise
pas ksh pour ecrire des scripts portables. On utilise sh. Le sh
c'est effectivement le cas, j'utilise bien sh :)
d'HPUX, qui est different du ksh d'HPUX, est basé sur une
version plus recente de ksh et est POSIX, donc supporte ! comme
tous les sh POSIX de tous les systemes.
jamais fait attention à ce détail ! mais c'est bon de le savoir :)
par habitude, j'ai éliminé le "! cmd" de mon language...
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Non, le ksh de HPUX est un ksh, il n'y a aucun standard qui regisse ksh donc aucune guarantie. En production, on n'utilise pas ksh pour ecrire des scripts portables. On utilise sh. Le sh
c'est effectivement le cas, j'utilise bien sh :)
d'HPUX, qui est different du ksh d'HPUX, est basé sur une version plus recente de ksh et est POSIX, donc supporte ! comme tous les sh POSIX de tous les systemes.
jamais fait attention à ce détail ! mais c'est bon de le savoir :) par habitude, j'ai éliminé le "! cmd" de mon language...
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.