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

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

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

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

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

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

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

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

echo "Some console message" 1>&3

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

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

向控制台和日志文件写入消息 – 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

将打印

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

在控制台和放

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

进入日志文件

猜你在找的Bash相关文章