如何在将脚本运行到文件时保存错误输出? 我有我的代码,但代码不跟踪错误并将错误保存到test.log14。 有人可以给我一些关于我的代码中可能出错的提示......
LOGFILE=/usr/local/etc/backups/test14.log
"$(date "+%m%d%Y %T") : Starting work" >> $LOGFILE 2>&1
答案 0 :(得分:3)
使用此代码:
#!/bin/bash
LOGFILE=/usr/local/etc/backups/test14.log
(
echo "$(date "+%m%d%Y %T") : Starting work"
... more commands ...
echo error 1>&2 # test stderr
echo "$(date "+%m%d%Y %T") : Done"
) >& $LOGFILE
()
使BASH在子shell中执行大部分脚本。子shell(stderr和stdout)的所有输出都被重定向到日志文件。
答案 1 :(得分:1)
执行命令时,屏幕上通常会显示2个输出:
您可以根据命令单独重定向它们。
例如:
ls >out 2>err
会给你两个文件; out
将包含ls
的输出,而err
将为空。
ls /nonexisting 1>out 2>err
将为您提供一个空的out
文件,err
将包含
" ls:无法访问/不存在:没有这样的文件或目录"
2>&1
将2(STDERR)重定向到1(STDOUT)
您的echo
没有任何错误,因此STDERR上没有输出。
所以你的代码可能需要像这样:
echo "$(date "+%m%d%Y %T") : Starting work"
work_command > work_output 2>> $LOGFILE
答案 2 :(得分:0)
发送命令的错误输出,而不是附加'错误输出来自附加' - 这是有道理的。我通常使用这种类型的过程的函数(类似于上面。)
试试这个:
2>&1 >> $LOGFILE
而不是
>> $LOGFILE 2>&1
###
function run_my_stuff {
echo "$(date "+%m%d%Y %T") : Starting work"
... more commands ...
echo "$(date "+%m%d%Y %T") : Done"
}
## call function and append to log
run_my_stuff 2>&1 >> ${LOGFILE} # OR
run_my_stuff 2>&1 | tee -a ${LOGFILE} # watch the log