Como posso fazer um erro em um script dentro de um script?

1

Digamos que eu tenha apple.sh

set -e
...some commands #X...
./banana.sh
...more commands #Y..

e, em seguida, banana.sh

set -e
...some commands #Z...

Minha expectativa era de que, se um erro fosse lançado em algum lugar em banana.sh , isso encerraria banana.sh em um estado de erro e, portanto, apple.sh também veria o erro e sairia. Eu sinto que eu já vi esse ser o comportamento. Mas agora estou vendo que isso não é verdade, e enquanto banana.sh sai como esperado quando ocorre um erro, apple.sh continua a partir daí continuando com o material "alguns comandos #Y".

Como posso fazer o erro em banana subir e ser pego por apple ?

Isso está no RHEL5

    
por jlarson 02.06.2015 / 18:28

1 resposta

0

Isso pode não ser o seu caso, mas você chamou banana.sh em um contexto específico em que -e está sendo ignorado?

No manual de referência do Bash , você pode ler uma explicação detalhada sobre tal contexto, com as informações importantes da seguinte forma:

If a compound command or shell function executes in a context where -e is being ignored, none of the commands executed within the compound command or function body will be affected by the -e setting, even if -e is set and a command returns a failure status. If a compound command or shell function sets -e while executing in a context where -e is ignored, that setting will not have any effect until the compound command or the command containing the function call completes.

Isso significa que você tem o seguinte apple.sh :

set -e

func() {
        echo '...some commands #X...'
        false # Suppose ./banana.sh fails here
        echo '...some commands #Y...'
        true
}

if func; then
        echo 'func() returns success'
else
        echo 'func() returns failure'
fi

Você receberá a seguinte saída:

...some commands #X...
...some commands #Y...
func() returns success

Não apenas bash, mas outras shells, incluindo dash e zsh, darão o mesmo resultado.

Para responder à sua pergunta, aparentemente não há como alterar o comportamento pelo menos no bash.

    
por 02.06.2015 / 21:29

Tags