Script de shell detectando erros do comando chamado por script

1

Estou chamando aplicativos do meu script de shell, que executa várias etapas importantes em sequência, uma das etapas abaixo:

for database in $( 
        echo 'show databases;' | 
        mysql --defaults-extra-file=/etc/sqlbackup/my.cnf \
              -e 'show databases' -s --skip-column-names|
        grep -vi information_schema )
do
  echo $database
done
exit 0

Eu sou capaz de registrar a saída na tela, o que estou fazendo através da função de eco.

Minha pergunta é o que aconteceria se um aplicativo (qualquer linha de comando chamada do script) não pudesse se conectar e lançasse um erro como:

'ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)'?

Os erros são relatados em uma variável de ambiente separada fora da saída da cadeia de caracteres? Se sim, como posso detectar isso? Como alguém mudaria o caminho que o script toma dependendo do sucesso ou do fracasso?

Sou programador .Net e a melhor analogia que posso fazer é onde uma exceção é lançada e distribuída:

catch (Exception e)
{
  // log the reason here: echo "error running database command: " + e.Description
}

Existe algo semelhante ao acima, mas para o shell carregado / bash?

    
por g18c 05.04.2013 / 13:45

1 resposta

3

Existem três fluxos principais de dados: entrada, saída e erro.

  • Stdin é entrada

  • O stdout é emitido

  • Stderr é um erro

Você pode redirecionar as mensagens de erro adicionando este 2>file.log no final do seu comando.

Isto irá gravar erros no arquivo de log que, por sua vez, você poderá ler com tailf file.log - em uma tela separada, se desejar.

$( echo 'show databases;' | /usr/bin/mysql --defaults-extra-file=/etc/sqlbackup/my.cnf -e 'show databases' -s --skip-column-names 2>>file.log |grep -vi information_schema )

Se precisar de mais detalhes, dê uma olhada aqui: link

    
por 05.04.2013 / 13:59