每次运行script.sh并将输出保存到文件时,如何从script.sh中记录错误?

时间:2015-01-28 13:14:11

标签: bash bash4

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

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

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

3 个答案:

答案 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个输出:

  1. STDOUT
  2. STDERR
  3. 您可以根据命令单独重定向它们。

    例如:

    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