Passe pelo código de status de saída após usar ||

Passe pelo código de status de saída após usar ||

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 fooparte 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 falsese o comando original falhar.

informação relacionada