É possível manter o último comando exit status ( $?) inalterado após um teste?
Por exemplo, eu gostaria de fazer:
command -p sudo ...
[ $? -ne 1 ] && exit $?
O último exit $?deve retornar o status de saída do sudo, mas sempre retorna 0(o código de saída do teste).
É possível fazer isso sem uma variável temporária?
Outro exemplo para esclarecer mais:
spd-say "$@"
[ $? -ne 127 ] && exit $?
Nesse caso, quero sair apenas se o primeiro comando for encontrado (código de saída! = 127). E eu quero sair com o spd-saycódigo de saída real (pode não ser
0).
EDIT: Eu esqueci de mencionar que eu prefiro uma solução de reclamação POSIX para melhor portabilidade.
Eu uso essa construção em scripts onde eu quero fornecer alternativas para o mesmo comando. Por exemplo, veja meu script crc32 .
O problema com variáveis temporárias é que elas podem sombrear outras variáveis e para evitar que você precise usar nomes longos, o que não é bom para a legibilidade do código.
[ $? -ne 127 ] && exit $?)
sudocomando for bem-sucedido (ou seja, se sudosair com o status 0). Mas, no seu código, o script continua em execução (não sai) se sudofor bem
commande sudona verdade não são . É isso o que quero dizer com sair apenas se o primeiro comando for encontrado (código de saída! = 127) e for um retorno especificado paracommand quando o comando que ele chama não for encontrado. Eu acho que o problema é que invocar sudocomo parte do teste permite sudoesmagar o retorno commandem primeiro lugar e assim distorcer o teste.
if ! command -p sudo; then exit; fique teria os mesmos resultados para o seu exemplo.