如何将命令的输出重定向到函数但抑制错误并输出到控制台?

如何将命令的输出重定向到函数但抑制错误并输出到控制台?

我需要将正在运行的命令的输出重定向到带有时间戳的日志文件(因此是一个函数而不是日志文件本身),但错误和输出都不应显示在控制台中。以下 -

command | my_func 2> /dev/null 

不管用。

就像是

command 2> logfile

可以,但是第二种情况我无法记录时间戳。我该怎么办?

答案1

看来你想要的是:

command 2> /dev/null | my_func 

它将 的 stderr 重定向command/dev/null,但将 stdout 管道传输到my_func。(旁注:您可能想看看命令ts)。

答案2

您甚至不需要为此使用任何功能!

要将错误重定向到/dev/null并输出到带有时间和日期的文件,您可以sed像这样使用:

command 2> /dev/null | sed -e "s/^/$(date) /" >> logfile 

sed -e "s/^/$(date) /"将以这种格式将当前日期附加Thu 09 Apr 2020 07:06:14 AM +03到每行的开头,并在日期和输出之间添加一个空格以提高可读性。


注意:

  • 要将错误和输出重定向到带有时间和日期的文件,请使用以下命令:
command 2>&1 | sed -e "s/^/$(date) /" >> logfile
  • 要使用自 Unix 纪元以来的秒数时间戳1586406740,请像这样将其更改$(date)$(date +%s)

祝你好运

答案3

如果只需要时间戳,请tsmoreutils包中查看。

command | ts

$ sudo apt install moreutils

答案4

另一个选择是使用 GNU awk:

myprogram | gawk '{print strftime(), $0}' >> logfile

如果您还想记录标准错误(假设是 bash shell):

myprogram |& gawk '{print strftime(), $0}' >> logfile

相关内容