在标准输出上打印并使用记录器记录

在标准输出上打印并使用记录器记录

我有一个 bash 脚本,其中包含几个“echo STRING”命令。我想用记录器记录 STRING,但仍将其打印在标准输出上。echo STRING | logger显然不这样做。

编辑:echo STRING | tee >(logger)做到了。 >(COMMAND) 是一个进程替换,它替换进程的输入。

答案1

在 bash 中你应该能够这样做:

logger(){
  tee >(command logger)
}

logger然后像以前一样通过管道传输。

如果您想按照 Stephen Harris 的建议通过自定义日志记录功能来实现此功能,可以这样做:

logger(){
  tee >(command logger)
}

echolog(){
  printf '%s\n' "$@" | logger
}

答案2

我通常会编写一个日志函数;就像是

mylog()
{
  echo "$@"
  echo "$@" | logger
}

mylog "Hello, world!"

它为您想要记录的内容提供了灵活性,甚至可以让您执行诸如在行前添加时间戳之类的操作(如果您需要的话)。

相关内容