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
Nicolas George
Thomas wrote in message
:
je croyais que exit faisait sortir du script en toutes circonstances


exit fait se terminer le shell en cours. Ni plus, ni moins.

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


Ces deux commandes créent un nouveau shell.

comment peut on faire ?


Pour faire quoi ?

Avatar
Thomas
In article <46ffa192$0$8084$,
Nicolas George <nicolas$ wrote:

Thomas wrote in message
:
je croyais que exit faisait sortir du script en toutes circonstances


exit fait se terminer le shell en cours. Ni plus, ni moins.

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


Ces deux commandes créent un nouveau shell.


ok



comment peut on faire ?


Pour faire quoi ?


2 exemples :


DOSSIERPARENT=`dirname "$0" || exit`

j'aimerais que, si jamais un jour dirname faisait une erreur, le script
se termine


((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'

j'aimerais que, si jamais un jour netstat faisait une erreur, le script
se termine (sans exécuter osascript ni ce qui suit)

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


Avatar
Nicolas George
Thomas wrote in message
:
DOSSIERPARENT=`dirname "$0" || exit`


Ce n'est pas fiable de toutes façons, tu as un problème de conception dans
le script.

((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'

j'aimerais que, si jamais un jour netstat faisait une erreur, le script
se termine (sans exécuter osascript ni ce qui suit)


Avec des accolades ça devrait aller.

Avatar
mpg
Le (on) dimanche 30 septembre 2007 15:59, Nicolas George a écrit (wrote) :

Thomas wrote in message
:
DOSSIERPARENT=`dirname "$0" || exit`


Ce n'est pas fiable de toutes façons, tu as un problème de conception dans
le script.

Pourquoi n'est-ce pas fiable ?


Manuel.


Avatar
Nicolas George
mpg wrote in message <fdocp7$21ht$:
Pourquoi n'est-ce pas fiable ?


Le chemin peut être falsifié de tout un tas de manières, et être changé en
cours de route.

Avatar
Thomas
In article <46ffabc5$0$6798$,
Nicolas George <nicolas$ wrote:

Thomas wrote in message
:
DOSSIERPARENT=`dirname "$0" || exit`


Ce n'est pas fiable de toutes façons, tu as un problème de conception dans
le script.


je sais que ça ne marche pas si on le met dans le path, par exemple
c'est ça que tu voulais dire ?

pas grave, pour l'instant il n'y a que moi qui l'utilise


par contre, je voudrais être prévenu si dirname fait une erreur

est ce que c'est possible sans faire
dirname "$0" || exit
une 2eme fois avant ?

et ça serait bien, d'une manière générale, si c'était possible de faire
avec `` comme on peut faire avec () en les remplaçant par {}
(c'est pas trop confus ?)



((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'

j'aimerais que, si jamais un jour netstat faisait une erreur, le script
se termine (sans exécuter osascript ni ce qui suit)


Avec des accolades ça devrait aller.


merci, ça marche :-)

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


Avatar
Alain Ketterlin
Thomas writes:

DOSSIERPARENT=`dirname "$0" || exit`


Pourquoi pas :

D=$(dirname "$0")
[ $? -eq 0 ] || exit 1

Cela dit, je ne vois pas ce que dirname peut provoquer comme erreur...

((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'


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).

-- Alain.

Avatar
Cyrille Lefevre
2 exemples :

DOSSIERPARENT=`dirname "$0" || exit`


DOSSIERPARENT=$(dirname "$0")
cd "${DOSSIERPARRENT}" || exit

j'aimerais que, si jamais un jour dirname faisait une erreur, le script
se termine


a priori, dirname ne sortira pas en erreur avec $0.
au pire, il renvoie ".".

perso, je préfère, en ksh :

if [[ $0 = */* ]]; then
DOSSIERPARENT=${0%/*}
else
DOSSIERPARENT=${PWD} # ou "."
fi

ce qui évite un appel à "dirname".

dans ou boucle ou un script en boucle, cela peut avoir son importance.

ATTENTION :

VAR=$(commande) renvoie le code retour de la commande.
typeset VAR=$(commande) renvoie celui de typeset, soit 0.

mieux vaut écrite :

typeset VAR VAR=$(commande)

((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'


l'exit et les parenthèses ci-dessus ne servent à rien.
la redirection sur /dev/null peut-être remplacé par "grep -q"

en clair, "netstat -rn | grep -q 192.168.1 || osascript -e"
en plus lisible.

j'aimerais que, si jamais un jour netstat faisait une erreur, le script
se termine (sans exécuter osascript ni ce qui suit)


dans ce cas, il te faudra passer par une variable temporaire :

ROUTES=$(netstat -rn) || exit
case ${ROUTES} in
192.168.1*) ;;
*) osascript -e ;;
esac

qui peu aussi s'écrire, en ksh :

ROUTES=$(netstat -rn) || exit
[[ ${ROUTES} != 192.168.1* ]] && osascript -e

ou

ROUTES=$(netstat -rn) || exit
[[ ${ROUTES} = 192.168.1* ]] || osascript -e

ce qui évite un appel à "grep".

ATTENTION :

[ x = y ] est différent de [[ x = y ]].

dans le 1er cas, il faut TOUJOURS protéger les variables tel que :

[ "$x" = "$y" ]

alors que dans le second, ce n'est pas nécessaire.

[[ $x = $y ]]

par ailleurs, dans le second cas, "y" est considéré comme une expression
rationnel shell (pattern). pour éviter cela, il faut mettre cette
"pattern" entre guillemets, tel que :

[[ $x = $y ]]

PS : en ksh 88, il FAUT utiliser "=", alors qu'en ksh93, c'est plutôt
"==". toutefois, "=" reste acceptable ! pas vraiment pratique...

Cordialement,

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

Avatar
Stephane Chazelas
2007-09-30, 15:24(+02), Thomas:
[...]
DOSSIERPARENT=`dirname "$0" || exit`

j'aimerais que, si jamais un jour dirname faisait une erreur, le script
se termine


dirname ne peut pas echouer (sauf que tu as oublié le --),
puisqu'il ne fait qu'afficher le dirname de son argument. Sinon,
tu peux toujours faire:

DOSSIERPARENT=$(dirname -- "$0") || exit

((netstat -rn || exit) | grep 192.168.1. > /dev/null) || osascript -e
'tell application "Internet Connect" to connect'

j'aimerais que, si jamais un jour netstat faisait une erreur, le script
se termine (sans exécuter osascript ni ce qui suit)


La, c'est plus delicat. Voir la FAQ de comp.unix.shell.

--
Stéphane

Avatar
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.

Regards, Cordialement,

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

1 2 3