我有一个 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!"
它为您想要记录的内容提供了灵活性,甚至可以让您执行诸如在行前添加时间戳之类的操作(如果您需要的话)。