linux - 将标准错误流输出传递给函数

标签 linux bash

我刚刚编写了一个简单的记录器,它将一 strip 有时间的消息附加到一个文件中。现在我还想将错误添加到该日志文件中,以便更好地理解出了什么问题。这是我当前的代码:

#!/bin/bash

logprint() {
echo "$(date +%T): $*" >> ./logfile
}

logdate() {
DATE=`date "+%d.%m.%Y"`
echo "-------------------- ${DATE} --------------------" >> ./logfile
}

日志打印函数接受参数并将日期和消息简单地写入日志文件。日志日期函数只是将日期写在开头。

现在我想把错误输出给日志打印函数。最好的方法是什么?

最佳答案

您可以为此使用 >>(cmd) 形式的进程替换技术。这允许您将标准错误流的输出重定向到函数。你可以做类似的事情

2> >(logprint)

但是您不能像从位置参数中读取一样从这个过程替换的输出中读取,您需要像通过标准输入读取一样读取。您可以将您的功能调整为如下所示。添加了用于演示目的的脚本

#!/usr/bin/env bash

logprint() {

    args=""
    if (( "$#" > 0 )); then
        args="$*"
    else
        while IFS= read -r line; do
            args+="$line"
        done
    fi

    echo "$(date +%T): $args" >> ./logfile
}

logprint "foobar"
mv foobar nosuchfile 2> >(logprint)

关于linux - 将标准错误流输出传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56018008/

相关文章:

regex - 如何使正则表达式匹配文件路径?

linux - 如何在大型代码库中运行 ctags?

linux - 启动 Tomcat

python - Ansible - "NameError: name ' urllib 2' is not defined"

bash - 当未提供 --stable 选项时,sort -n 是否可以预测地处理关系?如果有,怎么办?

linux - 通过 ssh 连接找不到 Bash、别名/自定义函数

linux - 如果程序在 shell 脚本中输出特殊字符串,则执行命令

linux - 查找具有特定名称且没有指向它们的符号链接(symbolic link)的文件夹

C控制台应用程序可以同时在Linux和Windows上运行吗

linux - 我怎样才能得到下个月的 shell ?