Função Bash, valor de retorno e tratamento de erros

2

Estou tentando envolver minha mente em Bash e acho que já cheguei muito longe. O que eu realmente não entendo ainda é o erro de manipulação ...

Eu tenho o seguinte script:

set -e
set -u

DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")
if [[ $? != 0 ]]; then
  exit 1
fi

Mesmo que a função downloadApplication falhe (meu resultado esperado agora), o script NÃO falha. Eu não consigo descobrir como verificar isso ao capturar a saída em uma variável. Se eu não colocar de volta em uma variável, ela funciona e falha conforme o esperado:

downloadApplication "$WEB_GROUP"
if [[ $? != 0 ]]; then
  exit 1
fi

Quais são minhas opções? Obrigado.

    
por Anders S 08.05.2012 / 12:25

3 respostas

1

Que tal algo assim?

DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP" || echo "SomeErrorString")
if [ $DOWNLOADED_ARTIFACT == "SomeErrorString" ]; then
  exit 1
fi

Isso significa que "se downloadApplication não for bem-sucedido, então echo SomeErrorString " (assim, seu DOWNLOADED_ARTIFACT será definido como SomeErrorString . Então, você poderá compará-lo com esse valor.

    
por 08.05.2012 / 14:12
0

O comando DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP") sempre terá êxito, porque o que importa para $? é a atribuição à variável, que é (quase) garantida para ser bem-sucedida, seja com a atribuição de 0 ou 1 to DOWNLOADED_ARTIFACT .

    
por 08.05.2012 / 12:29
0

Seu tratamento de erros funciona bem para mim. De fato, com set -e , o script sai na linha de execução e atribuição porque o resultado não está marcado. Tem certeza de que downloadApplication sai com o código de saída correto? Tente executar downloadApplication "$WEB_GROUP"; echo $? diretamente na linha de comando.

A propósito, você pode verificar o código de retorno e capturar a saída em uma única instrução:

if ! DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP"); then
    echo "Download failed"
    exit 1
fi

do_something $DOWNLOADED_ARTIFACT
    
por 09.05.2012 / 02:59