我正在尝试将命令的输出发送到我们的系统日志,这就是我到目前为止所得到的。
#!/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)