bash - 如何将命令的输出重定向到函数,但是禁止将错误和输出重定向到控制台?

分享于 

2分钟阅读

ubuntu

  繁體

问题:

我需要将命令的输出重定向到带有时间戳的日志文件(因此要使用函数而不能是日志文件),但是错误和输出均不应在控制台中显示。


command | my_func 2> /dev/null 



不能工作。

类似


command 2> logfile



有效,但不能记录时间戳。我该怎么做?


答案1:

如果只需要一个时间戳,请参见ts来自moreutils包。


command | ts



$ sudo apt install moreutils




答案2:

你需要:


command 2> /dev/null | my_func 



它将command的stderr重定向到/dev/null,但是stdout管道传递给my_func


答案3

你甚至都不需要函数!

要将错误重定向到/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





COMM  SUP  FUNC  函数  OUT  控制台