(commande || exit)

Le
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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #773193
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 ?

Thomas
Le #773192
In article 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.


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 !


Nicolas George
Le #773191
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.

mpg
Le #773190
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.


Nicolas George
Le #773189
mpg wrote in message
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.

Thomas
Le #773188
In article 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.


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 !


Alain Ketterlin
Le #773187
Thomas
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.

Cyrille Lefevre
Le #772918
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.

Stephane Chazelas
Le #772917
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

Cyrille Lefevre
Le #772916
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.

Publicité
Poster une réponse
Anonyme