Atualmente, estou fazendo isso em um script de shell POSIX:
success=false
pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename" && success=true
if [ "$success" = "true" ]
...
O problema é que não tenho certeza se faço isso corretamente.
Por exemplo, não entendo a diferença entre essa abordagem e apenas verificar $?
.
Por que eu me importo?
Bem, porque ShellCheck.net me avisou:
SC2181 Verifique o código de saída diretamente com, por exemplo, 'if mycmd;', não indiretamente com $?.
Se você só precisa verificar se o comando foi bem-sucedido ou não, o
if command; then foo; else bar; fi
deve atender às suas necessidades.Mas se por algum motivo você precisar fazer um tratamento de erro mais complexo, verificar o valor de
$?
seria mais apropriado:De acordo com o link que você postou, deve ser algo assim:
Em meus testes, isso pode ser um problema com os pipelines, dependendo do que está do outro lado do seu ... Acho que com o openssl você deve ficar bem, mas se estiver canalizando para algo como
cat
ouecho
acredito que sempre será tratado como sucesso porque o último comando no pipeline sairá com sucesso.Se você tiver apenas um comando para executar em caso de sucesso ou falha, algo assim também pode funcionar:
ou