54 votes

Comment désactiver le set -e pour une commande individuelle ?

La commande set -e fait échouer immédiatement un script bash lorsqu'une commande quelconque renvoie un code de sortie non nul.

  1. Existe-t-il un moyen simple et élégant de désactiver ce comportement pour une commande individuelle dans un script ?

  2. À quels endroits cette fonctionnalité est-elle documentée dans le manuel de référence de Bash ( http://www.gnu.org/software/bash/manual/bashref.html ) ?

0voto

user468942 Points 1

J'ai eu une question similaire récemment (bien que je ne l'aie pas postée, je m'y suis penché) et, d'après ce que je peux voir, il semble que l'utilisation de set +e avant la commande et de set -e après fonctionne de manière plus élégante. Voici un exemple, en récupérant la réponse de la commande et en ne laissant pas l'erreur la rejeter.

#!/bin/sh

args=""
for argcol in $*
do
    args="${args} ${argcol}"
done
fortunevar=""
fortfail=""
{
    set +e
    fortunevar=`fortune $args`
    fortfail=$?
    set -e
} &> /dev/null
if [ $fortfail == 0 ]
then
    echo ${fortunevar}
    say ${fortunevar}
else
    echo misfortune: an illegal option was detected!
    echo misfortune: usage: misfortune [-afilosw] [-m pattern][ [#%] file/directory/all]
fi

Cette commande récupère la sortie de 'fortune', en vérifiant son statut de sortie, et la répète en écho. Je pense que c'est ce que vous demandiez, ou du moins quelque chose de similaire ? En tout cas, j'espère que cela vous aidera.

0voto

noonex Points 97

J'aime lancer un sous-shell si je veux changer quelque chose temporairement. La commande ci-dessous démontre que la première bad_command est ignorée et que la seconde interrompt l'exécution.

bash -c 'set -e ;\
( set +e; bad_command ; echo still here ) ;\
echo even here ; \
bad_command ; \
echo but not here;'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X