Como detectar e lidar com erros em seus scripts de bash
- 4716
- 365
- Mrs. Willie Beahan
Podemos usar o comando TRAP para capturar o sistema de sinal de erro pelo sistema durante a execução do script. Então você pode executar um comando shell ou chamar uma função. Dessa forma, você pode executar seu código de script personalizado em um erro que ocorreu em um script de bash.
Isso pode ser útil para reverter quaisquer mudanças parciais, fechar conexões de banco de dados ou status de e -mail para as pessoas em questão, etc. Você pode usar comandos de armadilha com 'ERRAR' sinais como:
trap 'on_error_function' err
Quando um erro é gerado em um script de shell, ele executará uma função chamada 'on_error_function' do seu script de shell. Em vez de chamar uma função, você pode simplesmente executar um comando também.
Exemplo: Execute uma função em erro em bash
Vamos entender com um exemplo. Crie um script de shell de amostra e crie uma função com qualquer nome. Em seguida, adicione o armadilha
comando com a função para ERRAR sinal. Em seguida, adicione um comando simples que gera um erro.
123456789 | #!/usr/bin/Env Bash on_error () echo "algum erro ocorreu" trap 'on_error' err ls ~/dir_not_exists |
Execute o script acima e você verá os resultados abaixo:
Saída: LS: não é possível acessar '/home/tecadmin/dir_not_exists': nenhum arquivo ou diretório ocorreu algum erro
Você pode ver que o erro está preso e a função on_error ()
é executado pelo script Bash.
Exemplo: Execute um comando em erro em bash
Vamos ver mais um exemplo. Aqui vamos executar um comando quando qualquer erro ocorrerá no script do shell.
#!/usr/bin/Env Bash trap 'eco ohhh não!'Err ls ~/dir_not_exists12345 | #!/usr/bin/Env Bash trap 'eco ohhh não!'Err ls ~/dir_not_exists |
No script acima, não definimos nenhuma função separada. Simplesmente execute um comando de eco por erro. Execute o script acima e veja os resultados.
Saída: LS: Não é possível acessar!
Exemplo: obtenha o número de erros da linha
Você também pode descobrir o número da linha, onde o erro ocorreu no script bash junto com o nome do script. Para fazer isso, use o 'chamador' incorporado.
#!/usr/bin/Env bash on_error () echo "Erro encontrado em: $ (call)"> & 2 trap 'on_error' err ls ~/dir_not_exists123456789 | #!/usr/bin/Env bash on_error () echo "Erro encontrado em: $ (call)"> & 2 trap 'on_error' err ls ~/dir_not_exists |
Execute o script acima e veja os resultados. Você verá o nome do script e o número da linha, onde ocorreu o erro.
Saída: LS: Não é possível acessar '/home/tecadmin/dir_not_exists': nenhum arquivo ou erro de diretório encontrado em: 9 ./roteiro.sh
Conclusão
Obrigado por ler este artigo. Felizmente, este tutorial ajuda você a escrever uma melhor escrita de scripts de shell pegando o erro e tomando alguma ação.
Além disso, lembre -se de que a armadilha err captura apenas os erros de tempo de execução. Como se algum comando retornar o código de status diferente de zero. Ele não captura os erros de sintaxe, porque no caso de erro de sintaxe, o script falha sem executar nenhum comando.
- « Executando vários comandos de uma só vez em Linux
- (Resolvido) Connação desconhecida UTF8MB4_UNICODE_520_CI »