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

2

Eu quero escrever um alias que seja algo como:

alias baz="false || echo bar"

(Não é realmente 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

Eu quero fazer uma operação diferente que tenha o mesmo comportamento em todos os aspectos, como false || echo foo , exceto quando eu faço echo $? , ele retornaria 1 .

Nota: Espero que o echo foo bit seja essencialmente sempre bem-sucedido.

    
por durron597 13.04.2017 / 21:33

1 resposta

6

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 quer 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 somente o false final se o comando original falhar.

    
por 13.04.2017 / 22:25