example - bash script exit on error




Saída automática do script de shell bash em erro (5)

Aqui está como fazer isso:

#!/bin/sh

abort()
{
    echo >&2 '
***************
*** ABORTED ***
***************
'
    echo "An error occurred. Exiting..." >&2
    exit 1
}

trap 'abort' 0

set -e

# Add your script below....
# If an error occurs, the abort() function will be called.
#----------------------------------------------------------
# ===> Your script goes here
# Done!
trap : 0

echo >&2 '
************
*** DONE *** 
************
'

Eu tenho escrito algum script de shell e eu acharia útil se houvesse a capacidade de interromper a execução do script de shell se qualquer um dos comandos falhasse. Veja abaixo um exemplo:

#!/bin/bash  

cd some_dir  

./configure --some-flags  

make  

make install

Portanto, neste caso, se o script não puder ser alterado para o diretório indicado, ele certamente não desejará fazer um ./configure posteriormente se ele falhar.

Agora estou bem ciente de que eu poderia ter uma verificação if para cada comando (que eu acho que é uma solução sem esperança), mas existe uma configuração global para fazer o script sair se um dos comandos falhar?


Eu acho que o que você está procurando é o comando trap :

trap command signal [signal ...]

Para mais informações, veja esta página .

Outra opção é usar o comando set -e no topo do seu script - isso fará com que o script seja encerrado se qualquer programa / comando retornar um valor não verdadeiro.


Um idioma é:

cd some_dir && ./configure --some-flags && make && make install

Eu percebo que pode ficar muito tempo, mas para scripts maiores você pode dividi-lo em funções lógicas.


Uma alternativa para a resposta aceita que se encaixa na primeira linha:

#!/bin/bash -e

cd some_dir  

./configure --some-flags  

make  

make install

Use-o em conjunto com pipefail .

set -e
set -o pipefail

-e (errexit): Anula o script no primeiro erro, quando um comando sai com status diferente de zero (exceto em até ou while loops, if-tests, list constructs)

-o pipefail: faz com que um pipeline retorne o status de saída do último comando no canal que retornou um valor de retorno diferente de zero.

Capítulo 33. Opções





exit