Bash重定向标准输出功能

时间:2015-07-30 14:31:33

标签: bash logging stdout

我有2个日志功能:

log_msg()
{
    if [ ! -e $LOG_FILE ]; then
        touch $LOG_FILE
        chmod 0640 $LOG_FILE
    fi

    echo "$(date +'[%Y-%m-%d %T]') $1" >> $LOG_FILE
}
log_stream()
{
    while read data; do
        printf "$(date +'[%Y-%m-%d %T]') $data" >> $LOG_FILE
    done
}

为了记录消息:

log_msg "Hello World!";

为了记录我试图做的另一个函数的stdout:

bgcommand --a --b 2>&1 > log_stream &

但它不起作用。

我在这个问题上找到了记录管道的功能: Pipe output to bash function 但缺少一些东西。

1 个答案:

答案 0 :(得分:7)

您正在写入名为“log_stream”的文件。 shell没有在那里查找程序/函数名称。试试这个:

bgcommand --a --b 2>&1 | log_stream &
#......................^

或者,重定向到流程替换

bgcommand --a --b 2>&1 > >(log_stream) &

您可能希望查看名为ts的实用程序,其目的是为其输入添加时间戳。