bash – 将输出写入日志文件和控制台

前端之家收集整理的这篇文章主要介绍了bash – 将输出写入日志文件和控制台前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Unix shell中,我有一个env文件(env文件定义运行用户脚本所需的参数,如日志文件名和路径,重定向输出错误到日志文件数据库连接详细信息等),它重定向所有输出)和错误从执行脚本日志文件使用以下代码
exec 1>>${LOG_FILE}
exec 2>>${LOG_FILE}@H_301_2@ 
 

env文件在每个脚本的开头执行。由于env文件中的上述代码,可能是用户输出错误的所有控制台输出都直接输出到日志文件,这是我实际需要的。

但有一些选择性用户输出,我想在控制台和日志文件显示。但是因为上面的代码我不能这样做。

我知道,如果我删除上面的代码,我可以得到所需的结果,这种情况下,但我必须手动写入所有其他输出到日志文件,这不是一个容易的任务。

有没有办法在控制台和日志文件获取输出,而不删除上述代码

exec 3>&1 1>>${LOG_FILE} 2>&1@H_301_2@ 
 

会将stdout和stderr输出发送到日志文件中,但也会让你用fd 3连接到控制台,所以你可以做

echo "Some console message" 1>&3@H_301_2@ 
 

只是向控制台写入消息,或

echo "Some console and log file message" | tee /dev/fd/3@H_301_2@ 
 

向控制台和日志文件写入消息 – tee将其输出发送到自己的fd 1(这里是LOG_FILE)和您要求写入的文件(这里是fd 3,即控制台) 。

例:

exec 3>&1 1>>${LOG_FILE} 2>&1

echo "This is stdout"
echo "This is stderr" 1>&2
echo "This is the console (fd 3)" 1>&3
echo "This is both the log and the console" | tee /dev/fd/3@H_301_2@ 
 

将打印

This is the console (fd 3)
This is both the log and the console@H_301_2@ 
 

在控制台和放

This is stdout
This is stderr
This is both the log and the console@H_301_2@ 
 

进入日志文件

猜你在找的Bash相关文章