将shell的输出重新定向到txt文件
我已经编写了一个脚本,我想在脚本中包含一个函数,该函数会将控制台输出静默地记录到一个.txt文件中。我的shell脚本中使用的printf具有特定字符的颜色 样本:将shell的输出重新定向到txt文件,shell,Shell,我已经编写了一个脚本,我想在脚本中包含一个函数,该函数会将控制台输出静默地记录到一个.txt文件中。我的shell脚本中使用的printf具有特定字符的颜色 样本: # Color block G="\033[32m" N="\033[0m" R="\033[31m" Y="\033[33m" # MCS Check mcs=$(cat /home/admin/service-health.txt | grep -i mcs | cut -d ' ' -f 5 | tr . " ") i
# Color block
G="\033[32m"
N="\033[0m"
R="\033[31m"
Y="\033[33m"
# MCS Check
mcs=$(cat /home/admin/service-health.txt | grep -i mcs | cut -d ' ' -f 5 | tr . " ")
if [ "$mcs" == "up " ]
then
printf "${Y}MCS${N} Service Status is\t\t |${G}UP${N}\n"
else
printf "${Y}MCS${N} Service Status is\t\t |${R}DOWN${N}\n"
fi
此操作的控制台输出将显示颜色。
这在.txt日志记录中不是强制性的
然后,我将通过电子邮件将此.txt发送到以下地址:
sendmail $vdp $eaddr < /home/admin/health-check.txt
但由于这是一个彩色输出,我一直在我的电子邮件中收到:
[33mGSAN[0m Service Status is |[32mUP[0m
[33mMCS[0m Service Status is |[32mUP[0m
[33mTomcat[0m Service Status is |[32mUP[0m
[33mScheduler[0m Service Status is |[32mUP[0m
[33mMaintenance[0m Service Status is |[32mUP[0m
VDP [33mAccess State[0m is |[32mFULL[0m
在重定向过程中,有没有关于剥离颜色的想法?我不想使用sed来查找和替换,因为这看起来很乏味
谢谢。您可以使用
字符引导输出printf“mytext”>out.txt
将“mytext”打印到文件“out.txt”欢迎使用堆栈溢出。请尽快阅读这两页。你的问题是什么?如何从日志文件消息中省略颜色编码?您的脚本没有显示“静默日志记录”机制,因此我们无法猜测您必须使用哪些选项来修复它。您可以测试标准输出是否为“交互式设备”(终端或伪tty),并决定不包括着色,除非它是,或除非由着色选项命令(类似于--color=always
选项)。您可以从写入日志的流中删除颜色数据。毫无疑问还有其他的。当您不想再次添加和删除颜色时,可以将脚本更改为写入2个输出。使用一个函数(如colortee
)读取输入并写入双输出。使用一些保留字,colortee
可以替换彩色流转义码中的保留字。这解决了问题的标题,但问题主体中还没有真正的问题。我认为OP知道如何进行I/O重定向。
[33mGSAN[0m Service Status is |[32mUP[0m
[33mMCS[0m Service Status is |[32mUP[0m
[33mTomcat[0m Service Status is |[32mUP[0m
[33mScheduler[0m Service Status is |[32mUP[0m
[33mMaintenance[0m Service Status is |[32mUP[0m
VDP [33mAccess State[0m is |[32mFULL[0m