我正在尝试在我的脚本中实现-s
(即无声)选项 - 当给出错误/信息等时,将被发送到syslog,否则在屏幕上打印并发送到{{1 }} 同时。这就是我正在做的事情:
syslog
将echo -e "This Is a Test Message\nWell, not really!!" 2>&1 | logger
消息发送到echo
(不在屏幕上打印),但不能同时弄清楚如何同时执行这两项操作。我看到人们只谈论使用syslog
进行日志记录或者在屏幕上打印时将日志发送到不同的文件,而不是我正在尝试处理的情况。任何帮助或指针将不胜感激。干杯!!
答案 0 :(得分:4)
如果要将消息发送到syslog和stdout(而不是stderr),也可以这样做:
echo -e "This Is a Test Message\nWell, not really!!" | tee >(exec logger)
有效的方法(如果你正在创建一个函数):
exec 40> >(exec logger)
function log {
echo -e "$1"
echo -e "$1" >&40
}
log "something..."
exec 40>&- ## optionally close it at the end of the script.
每次进行回声时,这都会使您的脚本无法调用外部二进制记录器。
答案 1 :(得分:1)
在这种情况下,只需回显两次相同的消息。你可以这样做:
echo -e "This Is a Test Message\nWell, not really!!" | tee /dev/stderr | logger
但是,它实际上更简单,更有效:
error='This Is a Test Message\nWell, not really!!'
echo -e "$error" >&2
echo -e "$error" | logger
>& 2将输出发送到stderr,而不是stdout。
答案 2 :(得分:0)
你可以这样做:
echo -e "This Is a Test Message\nWell, not really!!" | logger -s
手册页(man logger)声明:
-s Log the message to standard error, as well as the system log.