web-dev-qa-db-fra.com

Autoriser certains codes de sortie à ne pas abandonner l'exécution en mode bash "-e"

Si umount renvoie 0 comme code de sortie, ce script continue. Parfois, le code de sortie est 127, je suis d'accord et le script devrait continuer. Comment puis-je modifier le script pour faire une telle "liste blanche" des codes de sortie umount autorisés?

set -e
Sudo umount /drive || [ $? -eq 0 ] 
echo do stuff

Si une telle technique existe, j'ai de nombreux cas d'utilisation.

1

Essayons ça:

if Sudo mount /drive; then
    : # exit status 0
else
    rc=$?
    [ $rc -ne 127 ] && exit $rc
fi

Testez avec ceci - testez différentes valeurs pour status

env status=0 bash -e -c '
    mycmd() { return $1; }
    if mycmd $status; then
        :
    else
        rc=$?
        [ $rc -ne 127 ] && exit $rc
    fi
    echo OK
'
2
glenn jackman

Vous pouvez utiliser une déclaration de cas pour mettre sur liste blanche ou effectuer une autre action.

Sudo umount /drive

case $? in
        0)
                ;;
        127)
                ;;
        *)
                echo 'bailing!'
                exit 1
                ;;
esac

echo 'doing more stuff'
1
stumblebee