在 bash 腳本中將退出代碼從 0 更改為 1

在 bash 腳本中將退出代碼從 0 更改為 1

我有一個 rsyncs 並像這樣結束的腳本

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

我剛剛被要求將其包裝在 API 中,但 API 聲明了這一點0=fail並且1=success.如何更改退出代碼以反映這一點?我需要給它一個變數嗎?

答案1

exit 1將退出並返回錯誤代碼 1,exit 0並將退出並傳回錯誤代碼 0。

例如:

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

答案2

  1. 修改後的答案、報告false(或(exit 1)),並true 根據非標準 API 的需要:

    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. 如果實際上不需要所有文字輸出,則可以大大減少程式碼:

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

    ……所需要的只是在前面rsync加上一個邏輯 NOT! 並傳回與傳回值相反的值rsync

答案3

透過 bash 超級簡單:

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

相關內容