Isso oculta a saída do primeiro comando e imprime Oops
em stderr se falhar. Até agora tudo bem.
#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || >&2 echo "Oops"
echo hi
Isso produz isso:
Oops
hi
Mas preciso sair e imprimir uma mensagem se o primeiro comando falhar. Então eu tentei usar parênteses.
#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || ( >&2 echo "Oops" ; exit )
echo hi
Aqui está a saída disso:
Oops
hi
Mas agora o exit
não funciona porque está fazendo isso em um subshell, fazendo com que ele seja impresso hi
, mesmo que eu quisesse que o script saísse.
Então, como faço para que o Bash acesse echo
algum texto e saia se um comando específico falhar usando o ||
operador? Estou ciente de que posso usar uma if
linha para fazer isso, mas prefiro não usar uma if
declaração completa se puder evitá-la.
#!/usr/bin/env bash
if [ "$(invalid_command > /dev/null 2>&1 ; printf $?)" != "0" ]; then >&2 echo 'Oops' ; exit 1; fi
Use o agrupamento de comandos (observe o
;
no final deexit
).Devolva isso no meu terminal.
Se você tiver um comando muito, poderá interceptar todos os erros.
Isso imprimirá Oops e sairá imediatamente, se algum comando no script estiver falhando.