2

将脚本运行到文件时如何保存错误输出?我的代码如下,但代码不跟踪错误并将错误保存到 test.log14。有人可以给我提示一下我的代码中可能有什么问题...

 LOGFILE=/usr/local/etc/backups/test14.log

 "$(date "+%m%d%Y %T") : Starting work" >> $LOGFILE 2>&1
4

3 回答 3

4

使用此代码:

#!/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)都被重定向到日志文件。

于 2015-01-28T13:36:26.603 回答
2

发送命令的错误输出,而不是附加“附加的错误输出”——如果这有意义的话。我通常将函数用于这种类型的过程(类似于上面。)

尝试这个:

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
于 2015-01-29T00:58:02.877 回答
2

执行命令时,通常会在屏幕上看到 2 个输出:

  1. 标准输出
  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
于 2016-10-02T17:17:23.410 回答