7

我正在尝试-s在我的脚本中实现(即静默)选项 - 当给出错误/信息等时,将被发送到系统日志,否则会在屏幕上打印并同时发送到syslog。这就是我正在做的事情:

echo -e "This Is a Test Message\nWell, not really!!"  2>&1 | logger

echo消息发送到syslog(不会在屏幕上打印),但无法弄清楚如何同时执行这两个操作。我看到人们只谈论在屏幕上打印时使用日志记录syslog或将日志发送到不同的文件,而不是我正在尝试处理的情况。任何帮助或指针将不胜感激。干杯!!

4

3 回答 3

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.

这将使您的脚本免于在每次执行回显时调用外部二进制记录器。

于 2013-09-02T11:07:41.223 回答
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 将输出发送到标准错误,而不是标准输出。

于 2013-09-02T11:06:36.690 回答
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.
于 2013-09-02T10:55:34.150 回答