Então, isso deve ser simples. Estou tentando testar uma condição no topo de um script e sair do roteiro inteiro quando a condição falha, e tenho duas declarações que quero executar quando resgatar. Com um único exit
e nenhuma segunda instrução, tudo bem, mas não importa como eu adicione uma segunda instrução, não consigo sair completamente. A regra cosmética implícita é que isso deve ser tudo em uma linha. Eu descobri isso quando esta mudança de uma linha para um script não funcionou como pretendido. O roteiro continuou.
Primeiro, deixe-me mostrar o que funciona . A linha a seguir será encerrada se a variável $ USER não for 'x' e isso é bom. Eu sei que isso funciona porque a digitação dessa linha em uma janela de terminal fechará essa janela de terminal (a menos que seu ID de usuário seja realmente 'x'), então está realmente fazendo uma saída de nível superior:
[ $USER = 'x' ] || exit 1
Então, isso é bom e exatamente como eu quero, exceto que quero repetir uma mensagem antes de sair; no entanto, se eu tentar adicionar o eco, a saída não ocorrerá mais ou, em vez disso, parece ocorrer "diferente", como talvez em um contexto de função bash ou algo assim. A próxima linha não fecha seu terminal, e isso é ruim.
[ $USER = 'x' ] || (echo "Time to bail" ; exit 1)
Eu pensei que talvez o ponto-e-vírgula estivesse sendo comido pelo eco, mas não, a saída parece estar sendo atingida. Como eu sei? Eu mudei o código acima e depois ecoei $? e eu vi qualquer valor que coloquei onde você vê "1" acima. E é claro que eu estava vendo esses valores em uma janela de terminal que queria ser fechada e não estava fechada.
A próxima variação também mostra uma segunda maneira de executar um eco e uma segunda instrução, mas novamente o mesmo comportamento ocorre quando uma saída é usada:
[ $USER = 'x' ] || (echo "Time to bail" && exit 1)
Espero que alguém aqui faça tudo isso não apenas não estranho, mas sensato.
Então, isso não é possível em uma linha?
( bash --version
: GNU bash, version 4.3.30(1)-release
)