将脚本运行到文件时如何保存错误输出?我的代码如下,但代码不跟踪错误并将错误保存到 test.log14。有人可以给我提示一下我的代码中可能有什么问题...
LOGFILE=/usr/local/etc/backups/test14.log
"$(date "+%m%d%Y %T") : Starting work" >> $LOGFILE 2>&1
使用此代码:
#!/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)都被重定向到日志文件。
发送命令的错误输出,而不是附加“附加的错误输出”——如果这有意义的话。我通常将函数用于这种类型的过程(类似于上面。)
尝试这个:
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
执行命令时,通常会在屏幕上看到 2 个输出:
您可以根据命令独立重定向它们。
例如:
ls >out 2>err
会给你两个文件;out
将包含来自的输出ls
并且err
将为空。
ls /nonexisting 1>out 2>err
会给你一个空out
文件,err
并将包含
“ls:无法访问/不存在:没有这样的文件或目录”
重定向 2 ( STDERR 2>&1
) 到 1 (STDOUT)
您echo
没有任何错误,因此 STDERR 上没有输出。
所以你的代码可能需要是这样的:
echo "$(date "+%m%d%Y %T") : Starting work"
work_command > work_output 2>> $LOGFILE