Cambiar el código de salida de 0 a 1 en el script bash

Cambiar el código de salida de 0 a 1 en el script bash

Tengo un script que se sincroniza y termina así

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

Me acaban de pedir que lo incluya en una API, pero la API indica que 0=faily 1=success. ¿Cómo puedo cambiar el código de salida para reflejar esto? ¿Necesito asignarle una variable?

Respuesta1

exit 1saldrá con un código de error de 1 y exit 0saldrá con un código de error de 0.

Por ejemplo:

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

Respuesta2

  1. Respuesta revisada, informe false(o (exit 1)) true según sea necesario según la API no estándar:

    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. Si toda esa salida de texto no es realmente necesaria, el código podría reducirse mucho:

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

    ...todo lo que se necesita es preceder rsynccon un NOT lógico ! y devolver lo contrario de lo que rsyncdevuelve.

Respuesta3

súper fácil a través de bash:

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

información relacionada