bash スクリプトの終了コードを 0 から 1 に変更する

bash スクリプトの終了コードを 0 から 1 に変更する

rsyncしてこのように終了するスクリプトがあります

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 $?

関連情報