/usr/bin/logger 中的“多路复用”stdout 和 stderr

/usr/bin/logger 中的“多路复用”stdout 和 stderr

我最近发现了 /usr/bin/logger,发现它非常好。

我注意到它包含一个优先级参数(-p)(facility.info、facility.alert等)。

因此,如果我只想记录 stdin,我可以这样做:

stuff | logger -p cron.info

只记录 stderr,方法如下:

stuff 2>&1 > /dev/null | logger -p cron.err

要记录 stdout 和 stderr :

stuff 2> >(logger -p cron.err) | logger -p cron.info

我想知道是否有更简洁的方法来做到这一点,以避免大量的复制粘贴。

有没有办法可以实现这样的目标?

logging -F cron -s info -e err stuff

非常感谢

答案1

如果所需的语法是

logging cron info err stuff

在这种情况下,请使用以下函数:

logging() {
    if [ "$#" -lt 4 ]; then
        echo "Too few arguments." >&2
        return 1
    else
        local prefix postfix1 postfix2
        prefix="$1"
        postfix1="$2"
        postfix2="$3"
        shift 3
        "$@" 2> >(logger -p "$prefix.$postfix2") | logger -p "$prefix.$postfix1"
    fi
}

笔记:

  • 您可以构建一个独立脚本。
  • 解析-F, -s,-e是可能的,尽管不像上面那么简单-y 方法。

相关内容