Permitir que determinados códigos de saída não abortem a execução no modo bash “-e”

1

Se umount retornar 0 como o código de saída, esse script continuará. Algumas vezes, o código de saída é 127, estou bem com isso e o script deve continuar. Como posso modificar o script para fazer tal "whitelisting"? de códigos de saída de umount permitidos?

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

Se tal técnica existe, eu tenho muitos casos de uso para isso.

    
por american-ninja-warrior 16.01.2018 / 18:14

3 respostas

1

Vamos tentar isso:

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

Teste com isso - experimente valores diferentes para status

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

Você pode usar uma declaração de caso para colocar na lista de permissões ou realizar outra ação.

sudo umount /drive

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

echo 'doing more stuff'
    
por stumblebee 17.01.2018 / 01:16
-1

Este responder-em-um-comentário por glenn Jackman funciona para mim:

mycmd || [ $? -eq 127 ] || exit
    
por american-ninja-warrior 17.01.2018 / 14:08