我尝试获取标准错误通信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;
我尝试这样的事情:
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;
但这个解决方案在两个方面对我不起作用。当我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>&1
告诉 bash 合并 stderr 和 stdout$(< $test1)
读取文件内容${test1}
- 你必须删除
${test1}
- 在 ubuntu 15.X 上测试,有效
${test1}