
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
修正された回答、レポート
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
テキスト出力がすべて必要ない場合は、コードを大幅に削減できます。
! rsync -azvh /dir -e ssh [email protected]:/
...必要なのは、
rsync
論理 NOT を先行させて!
、返される値の反対を返すことだけですrsync
。
答え3
bash を使えば超簡単:
test $((`echo "${PIPESTATUS[@]}" | tr ' ' '+'`)) -eq 0
echo $?