if条件内の変数にstderrをリダイレクトする方法は?吹く

if条件内の変数にstderrをリダイレクトする方法は?吹く

mkdir -p $FINAL_BACKUP_DIR私はstderr通信を取得しますlogger

これにより、ログがより完全になります。たとえば、ユーザーは自分に権限がないか$FINAL_BACKUP_DIR存在しないことがわかります。

if ! mkdir -p $FINAL_BACKUP_DIR; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Standard error communicate. Backup canceling." 1>&2
    exit 1;
fi;

私は次のことを試してみます:

if ! mkdir -p $FINAL_BACKUP_DIR 2>> ${test1}; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $test1" 1>&2
    exit 1;
fi;

しかし、このソリューションは2つの点で私には適していません。早く作っtest1た時test1=0なのかな。

Ubuntu 14.04を使用してください。

答え1

/dev/null「物を捨てる」ための標準装置です。

だから

some_command 2> /dev/null

some_commandからにエラーを送信します/dev/null。つまり、エラーを削除します。

したがって:

if ! mkdir -p $FINAL_BACKUP_DIR 2> /dev/null
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling."
  exit 1
fi

追加の文字がすべて必要なわけではありません;。 :-)

編集する:

また、エラーを出力して変数に結果をキャプチャし、変数が空であるかどうかをテストすることもできます。これにより、ユーザーに理由を知らせることができます。

result=$(mkdir -p $FINAL_BACKUP_DIR 2>&1)
if [ -n "$result" ]
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling: $result"
  exit 1
fi

答え2

努力する

if ! mkdir -p $FINAL_BACKUP_DIR > ${test1} 2>&1
then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $(< ${test1})" 
    exit 1;
fi;

どこ

  • > ${test1}出力リダイレクト(標準出力)
  • 2>&1bashにstderrとstdoutをマージするように指示します。
  • $(< $test1)ファイル内容を読む${test1}
  • 削除する必要があります${test1}
  • Ubuntu 15.Xでテストされており、効果的です。${test1}

関連情報