如何将linux命令日志捕获到文件中?



假设我有以下命令。

STATE_NOT_C_COUNT=`mongo --host "${DB_HOST}" --port 27017 "${MONGO_DATABASE}" --eval "db.$MONGO_DATABASE.count({"state" : {"'"$ne"'":"C"},"physicalTableName":"table_name"},{nolock:true})" | tail -1`

当我曾经运行上述命令时,出现异常,例如

异常:连接失败

我想通过错误函数将此异常捕获到文件中。

error(){
if [ "$?" -ne "0" ]; then
echo "$1" 2>&1 error_log
exit 1
fi       
} 

我像这样使用上面的函数:

error $STATE_NOT_C_COUNT

但是我无法通过文件中的函数捕获异常。

你正在做的事情很糟糕。 让失败的程序将其错误消息打印到 stderr,并确保 stderr 指向正确的内容。 但是,您遇到的主要问题只是缺少引号。 尝试:

error "$STATE_NOT_C_COUNT"

问题是命令error $STATE_NOT_C_COUNT受字段拆分的影响,因此如果$STATE_NOT_C_COUNT 包含任何空格,则会将其拆分为参数,而您只编写第一个参数。 另一种选择是在函数中写入echo "$@",但这会挤压空格。 但是,怎么强调都不为过,这是一种可怕的方法,完全违背了Unix哲学。 程序应该将其错误写入 stderr,您应该让它们去那里。 只要确保stderr指向你想要的地方。 捕获 stderr 的唯一可能原因是,如果您想将其写入多个位置,因此您可以将其管道传输到tee或系统记录器或其他消息总线,但这样做是值得怀疑的。

最新更新