Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将shell的输出重新定向到txt文件_Shell - Fatal编程技术网

将shell的输出重新定向到txt文件

将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

我已经编写了一个脚本,我想在脚本中包含一个函数,该函数会将控制台输出静默地记录到一个.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 . " ")

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