如何将 stderr 重定向到 if 条件内的变量?重击

Mar*_*inP 3 bash

我试图得到标准差,从通信mkdir -p $FINAL_BACKUP_DIR和消息发送我们的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;
Run Code Online (Sandbox Code Playgroud)

我尝试这样的事情:

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;
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案在两个方面对我不起作用。当我test1更早test1=0或没有创建时。

我使用 Ubuntu 14.04。

Ste*_*ris 6

/dev/null 是“扔掉东西”的标准装置。

所以

some_command 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

将从some_commandto发送错误/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
Run Code Online (Sandbox Code Playgroud)

请注意,您也不需要所有这些额外的;字符:-)

编辑:

您还可以将错误直接输出并捕获变量中的结果并测试该变量是否为空。这样你就可以向用户报告原因

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
Run Code Online (Sandbox Code Playgroud)