Parando .bashrc sem sair do shell

1

Meu arquivo .bashrc é modularizado e tenho uma verificação de erros nele. Em scripts bash, eu normalmente tenho uma função _errexit (ou algo similar) que eu chamo quando detecto um erro e quero sair.

No caso do meu arquivo (s) bashrc, não quero sair (ele fecharia o shell) - mas quero exibir uma mensagem de erro e parar o processamento imediatamente.

Alguma idéia de como isso pode ser possível?

    
por nfarrar 30.04.2014 / 16:15

2 respostas

4

No BASH você pode usar o return embutido:

return [n]

Causes a function to exit with the return value specified by n. If n is omitted, the return status is that of the last command executed in the function body. If used outside a function, but during execution of a script by the . (source) command, it causes the shell to stop executing that script and return either n or the exit status of the last command executed within the script as the exit status of the script. If used outside a function and not during execution of a script by ., the return status is false. Any command associated with the RETURN trap is executed before execution resumes after the function or script.

Para outras camadas, pode funcionar de forma diferente, claro.

Se você puder reescrever o script principal como um loop, poderá usar a instrução break com base no resultado do comando loop.

    
por 30.04.2014 / 16:29
1

Verifique o resultado do seu processamento e continue somente quando nada tiver falhado.

module_1
if [ $? -ne 0 ]; then
   display_error_function
else
   module_2
   if [ $? -ne 0 ]; then
      display_error_function
   else
      echo OK
   fi
fi

Quando você tem muitos módulos, considere uma variável de shell extra.
EDIT: Com a variável extra você pode evitar aninhamento profundo (basta repetir o bloco de if).

ERRORSFOUND=0
...
if [[ ${ERRORSFOUND} -eq 0 ]]; then
   module_x
   if [[ $? -ne 0 ]]; then
      ERRORSFOUND=1
   fi
fi
    
por 30.04.2014 / 16:39