Quero escrever um alias que seja algo como:
alias baz="false || echo bar"
(Na verdade não é false
, é um comando que pode falhar). No entanto, quero passar o código de status com falha para o próximo invocador. Em outras palavras, aqui está o comportamento atual:
$ false; echo $?
1
$ false || echo foo; echo $?
0
Quero fazer uma operação diferente que tenha o mesmo comportamento em todos os aspectos que false || echo foo
, exceto que quando eu fizer echo $?
isso retornaria 1
.
Observação:Espero que a echo foo
parte essencialmente sempre tenha sucesso.
Responder1
Uma função para salvar o valor de retorno de um comando não é tão complicada:
f() {
some-command-that-can-fail
retval=$?
if [ "$retval" != 0 ] ; then
echo the command failed
fi
return $retval
}
Se você não se importa com o valor de retorno exato, mas deseja apenas um código de retorno diferente de zero, isso funcionaria:
somecmd || ( echo it failed ; false )
Você precisa do subshell (ou de um bloco composto) para executar o final somente false
se o comando original falhar.