Altere o código de saída de 0 para 1 no script bash

Altere o código de saída de 0 para 1 no script bash

Eu tenho um script que sincroniza novamente e termina assim

rsync -azvh /dir -e ssh [email protected]:/
RESULT="$?"

# check result of rsync db's
if [ "$RESULT" != "0" ]; then
    echo -e "rsync exit Code:" $RESULT "\nFAILED to rsync backups"
else
    echo "SUCCESSFULL rsync of backups"
fi

Acabei de ser solicitado a envolvê-lo em uma API, mas a API afirma isso 0=faile 1=success. Como posso alterar o código de saída para refletir isso? Preciso atribuir uma variável a ele?

Responder1

exit 1sairá com um código de erro 1 e exit 0sairá com um código de erro 0.

Por exemplo:

rsync -azvh /dir -e ssh [email protected]:/
RESULT="$?"

# check result of rsync db's
if [ "$RESULT" != "0" ]; then
    echo -e "rsync exit Code:" $RESULT "\nFAILED to rsync backups"
    exit 0
else
    echo "SUCCESSFULL rsync of backups"
    exit 1
fi

Responder2

  1. Resposta revisada, relatório false(ou (exit 1)) e true conforme necessário de acordo com a API não padrão:

    rsync -azvh /dir -e ssh [email protected]:/
    RESULT="$?"
    # check result of rsync db's
    if [ "$RESULT" = "0" ]; then
        echo "SUCCESSFULL rsync of backups"
        false
    else
        echo -e "rsync exit Code:" $RESULT "\nFAILED to rsync backups"
        true
    fi
    
  2. Se toda essa saída de texto não for realmente necessária, o código poderá ser muito reduzido:

    ! rsync -azvh /dir -e ssh [email protected]:/
    

    ... tudo o que é necessário é preceder rsynccom um NOT lógico ! e retornar o oposto do que rsyncretorna.

Responder3

super fácil via bash:

test $((`echo "${PIPESTATUS[@]}" | tr ' ' '+'`)) -eq 0
echo $?

informação relacionada