Saída de controle de fluxo do Linux para terminal em falha

0

Eu tenho uma consulta com controle de fluxo. Eu quero sair do script para terminal quando a mensagem é: HOSTNAME NOT ADDED IN /tmp/hosts EXITING , que é uma mensagem de falha.

if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts; then
  echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]; then
  echo " HOSTNAME NOT ADDED IN /tmp/hosts EXITING"; exit
fi|tee -a /tmp/log;

Eu tentei o script acima, mas ele não consegue sair em caso de falha. Como faço para corrigir isso?

    
por user2692634 26.11.2013 / 13:46

1 resposta

0

Eu acredito que o problema é que, sempre que você cria um pipe, o shell coloca os dois lados em processos separados, mesmo que não seja necessário. Em particular, seu bloco de instruções if - fi está sendo executado em um processo separado a partir do próprio shell script, então sua instrução exit termina o bloco if - em um ponto em que está prestes a terminar, de qualquer forma - por isso não realiza nada.

Existem provavelmente algumas maneiras de corrigir isso - provavelmente algumas mais limpas do que as seguintes - mas eu não tenho acesso a um sistema * nix no momento para testar qualquer um deles. Uma maneira simples que deve funcionar é usar um arquivo de sinalizador:

exit_flag_file="/tmp/my_exit.$$"
rm –f "$exit_flag_file"
if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts
then
    echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]
then
    echo " HOSTNAME NOT ADDED IN /tmp/hosts; EXITING"
    > "$exit_flag_file"
fi | tee -a /tmp/log
if [ -f "$exit_flag_file" ]
then
    exit
fi
    
por 26.11.2013 / 22:55