Então eu tenho um script assim:
somecommad | grep --invert-match something
Eu gostaria de poder executar condicionalmente um comando diferente se somecommand
falhar. Aqui está o que eu tentei:
somecommand | grep --invert-match something || {
echo 'Oops'
}
Mas isso não funcionou (o grep
não foi executado). Qual é a maneira correta de fazer isso?
@steeldriver mencionado nos comentários que
PIPESTATUS
pode funcionar. Eu tentei, e funcionou bem. Aqui está o que eu fiz:Ele executa o comando como antes, mas então eu tenho uma
if
instrução para examinar aPIPESTATUS
matriz. Eu só me importo com o primeiro elemento, então é para esse que eu olho. Eu verifico se falhou (se o código de saída não for0
), e falhou, executeecho 'Oops'
Outra maneira, dependendo do comportamento exato necessário, é usar a
pipefail
opção :Então, se você não se importa com qual
somecommand
ougrep
falhou, desde que um deles tenha falhado: