Como faço para que meu script execute mais um comando depois que um comando anterior retornar um valor diferente de zero antes de ser anulado?

1

Eu tenho um script de shell que chama um script Perl para fazer algum processamento de arquivo. Os scripts Perl saem com um valor zero ou um valor. Eu tenho o comando Unix set -e no início do meu script para abortar o script se o script Perl sair com um valor de um. Eu só estava me perguntando se existe algum comando no Unix que eu possa usar que execute um comando antes que o script seja abortado se o script Perl sair com um valor? Essencialmente, quero que o script me envie um email informando se o script Perl foi executado com êxito. Meu código se parece com isso agora:

#!/bin/bash

set -e

function email_success {
#Some code for the email 
}

function email_fail {
#Some code for the email
}

usr/bin/perl perlscript.pl

if [$? -eq 0]; then 
 email_success
else 
 email_fail
fi 

#More commands to be executed if its successful 
    
por Cpoole 16.07.2015 / 16:49

2 respostas

1

Apenas não use set -e e adicione uma saída à sua ramificação if fail. Se você quiser esse comportamento para o restante do script, adicione o set -e após a chamada de e-mail.

    
por 16.07.2015 / 16:59
1

Use set -e

Você pode escrever:

#!/bin/bash
set -e

# function email_success {...}

# function email_fail { ... }

if /usr/bin/perl perlscript.pl; then
  email_success
else
  email_fail
  exit 1
fi

#More commands to be executed if its successful 

Explicação :

Manual de referência do Bash diz:

-e Exit immediately if a pipeline, which may consist of a single simple command, returns a non-zero status. The shell does not exit if the command that fails is part of the test in an if statement.

Construções condicionais (if) :

The syntax of the if command is

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
  fi

The test-commands list is executed, and if its return status is zero, the consequent-commands list is executed. If ‘else alternate-consequents’ is present, and the final command in the final if or elif clause has a non-zero exit status, then alternate-consequents is executed.

Veja também: Use o Modo Estrito Unofficial Bash (A menos que você elimine Depuração)

    
por 20.07.2015 / 02:15