Se você chamar o script source
, poderá usar return <x>
where<x>
estará o status de saída do script (use um valor diferente de zero para erro ou falso). Mas se você chamar um script executável (ou seja, diretamente com seu nome de arquivo), a declaração de retorno resultará em uma reclamação (mensagem de erro "return: pode apenas 'retornar' de uma função ou script de origem").
Se exit <x>
for usado, quando o script for chamado source
, resultará na saída do shell que iniciou o script, mas um script executável será encerrado, conforme o esperado.
Para lidar com ambos os casos no mesmo script, você pode usar
return <x> 2> /dev/null || exit <x>
Isso manipulará qualquer chamada que seja adequada. Isso pressupõe que você usará essa declaração no nível superior do script. Eu desaconselharia a saída direta do script de dentro de uma função.
Nota: <x>
é suposto ser apenas um número.
1
consistente. Se o script for executado por outro script, convém definir seu próprio conjunto de códigos de status com um significado específico. Por exemplo,1
== testes falharam,2
== falha na compilação. Se o script fizer parte de outra coisa, pode ser necessário ajustar os códigos para corresponder às práticas usadas lá. Por exemplo, quando parte do conjunto de testes é executada pela automake, o código77
é usado para marcar um teste como ignorado.