将命令输出发送到屏幕和系统日志

将命令输出发送到屏幕和系统日志

我正在尝试将命令的输出发送到我们的系统日志,这就是我到目前为止所得到的。

#!/bin/bash
log()
{
    logger -s -t $(basename $0) "$@"
}

/bin/echo "test" 2>&1 | (log)

这非常有效!

[root@server bin]# sh /var/tmp/script.sh 
script.sh: test

但是,当我尝试将字符串附加到日志消息的开头时,它无法工作!

#!/bin/bash
log()
{
    logger -s -t $(basename $0) "DEBUG: $@"
}

/bin/echo "test" 2>&1 | (log)

这是输出

[root@server bin]# sh /var/tmp/script.sh
script.sh: DEBUG:

如何解压 $@/$* 变量并在日志消息中附加前缀而不丢失原始命令的标准输出?

答案1

这是记录的行为:

信息

将此消息写入日志;如果未指定,并且-f未提供标志,则记录标准输入。

幸运的是,您可以将所需的信息添加到记录器的标准输入中:

log()
{
    {
        printf "DEBUG: $@"          # Prepends the prefix.
        cat                         # Outputs the original input.
    } | logger -s -t $(basename $0)
}

答案2

将参数传递给函数可以用作$1$@不同于读取stdin

您必须stdin首先获取数据。以下可能不是理想的解决方案,但可以为您提供提示:

#!/bin/bash
log()
{
    read INPUT
    logger -s -t $(basename $0) "DEBUG: $INPUT"
}

echo "test" | (log)

相关内容