Estou criando um Shell Script que tem uma if
função como esta:
if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias
then
echo $jar_file signed sucessfully
else
echo ERROR: Failed to sign $jar_file. Please recheck the variables
fi
...
Quero que a execução do script termine depois de exibir a mensagem de erro. Como posso fazer isso?
Se você colocar
set -e
um script, o script será encerrado assim que qualquer comando dentro dele falhar (ou seja, assim que qualquer comando retornar um status diferente de zero). Isso não permite que você escreva sua própria mensagem, mas geralmente as próprias mensagens do comando com falha são suficientes.A vantagem dessa abordagem é que ela é automática: você não corre o risco de esquecer de lidar com um caso de erro.
Os comandos cujo status é testado por uma condicional (como
if
,&&
ou||
) não encerram o script (caso contrário, a condicional seria inútil). Um idioma para o comando ocasional cuja falha não importa écommand-that-may-fail || true
. Você também podeset -e
desativar uma parte do script comset +e
.fonte
-x
sinalizador-e
é suficiente para rastrear onde o programa está saindo. Isso implica que o usuário do script também é o desenvolvedor.Se você deseja lidar com um erro em vez de sair às cegas, em vez de usar
set -e
, use atrap
noERR
pseudo sinal.Outras armadilhas podem ser configuradas para lidar com outros sinais, incluindo os sinais usuais do Unix mais os outros pseudo-sinais do Bash
RETURN
eDEBUG
.fonte
Aqui está o caminho para fazê-lo:
fonte
exit 1
é tudo o que você precisa. O1
é um código de retorno, portanto você pode alterá-lo se desejar, digamos,1
significar uma execução bem-sucedida e-1
significar uma falha ou algo parecido.fonte
test
ou&&
ou||
.