No seu exemplo apt-get update
não saiu com erro,
porque considerava os problemas como avisos, não como fatalmente ruins.
Se houver um erro realmente fatal, ele sairá com um status diferente de zero.
Uma forma de reconhecer anomalias é verificando esses padrões em stderr
:
- As linhas que começam com
W:
são avisos - Linhas começando com
E:
são erros
Você poderia usar algo assim para emular uma falha caso os padrões acima correspondam ou o código de saída de apt-get update
em si seja diferente de zero:
if ! { sudo apt-get update 2>&1 || echo E: update failed; } | grep -q '^[WE]:'; then
echo success
else
echo failure
fi
Observe o !
no if
.
É porque o grep
sai com sucesso se o padrão foi correspondido,
isto é, se houve erros.
Quando não houver erros, o grep
falhará.
Portanto, a condição if
é negar o código de saída do grep
.