use*_*112 4 bash error-handling stdout timestamp
我需要将我正在运行的命令的输出重定向到带有时间戳的日志文件(因此是一个函数而不是日志文件本身),但错误和输出都不应该显示在控制台中。下列 -
command | my_func 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
不管用。
就像是
command 2> logfile
Run Code Online (Sandbox Code Playgroud)
有效,但我无法在第二种情况下记录时间戳。我该怎么办?
看来你想要:
command 2> /dev/null | my_func
Run Code Online (Sandbox Code Playgroud)
它将 stderr 重定向command到/dev/null,但将标准输出通过管道传输到my_func. (旁注:你可能要检查的ts命令)。
您甚至不需要为此的函数!
要将错误重定向/dev/null并输出到带有时间和日期的文件,您可以sed像这样使用:
command 2> /dev/null | sed -e "s/^/$(date) /" >> logfile
Run Code Online (Sandbox Code Playgroud)
sed -e "s/^/$(date) /"将以这种格式将当前日期附加Thu 09 Apr 2020 07:06:14 AM +03到每行的开头,并在日期和输出之间添加一个空格以提高可读性。
注意:
command 2>&1 | sed -e "s/^/$(date) /" >> logfile
Run Code Online (Sandbox Code Playgroud)
1586406740。改成$(date)$(date +%s)祝你好运