shell 日志文件包含不需要的符号[重复]

5jvtdoz2  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(119)
    • 此问题在此处已有答案**:

(19个答案)
How can I detect if my shell script is running through a pipe?(6个答案)
17小时前关门了。
我正在写一个脚本来自动安装程序和配置,当脚本执行时,它会生成一个. log文件,以便用户在需要时进行分析。结果,一些不需要的符号被写入日志文件。
图中是日志文件的写入过程,请注意我提到的

符号
这是端子

的输出
显然,这与我对echo命令的输出颜色所做的更改有关。

# Styles
RED_BOLD="\033[1;31m"
GREEN_BOLD="\033[1;32m"
RESET_STYLE="\033[00m"
echo -e "$GREEN_BOLD"SUCESSFULY COMPLETED."$RESET_STYLE"

下面是我如何生成这样一个文件。

LOG_FILE_LOCATION=/home/$(id -un)
exec > >(tee -i $LOG_FILE_LOCATION/"Log file.log")
exec 2>&1

如何使这些符号不被写入日志文件?

ryoqjall

ryoqjall1#

短溶液:
替换
第一个月

'tee〉(sed-e“s/\x1b[[01][0-9;]*m//g”〉$日志文件位置/“日志文件. log”)
稍微分解一下(或者如何找到解决方案):
用途
echo -e "I ${RED_BOLD}love${RESET_STYLE} Stack Overflow\n" | od -ta
看看我们需要删除哪些字符。
现在,将sed命令组合在一起,直到所有颜色代码字符消失,例如:
echo -e "I ${RED_BOLD}love${RESET_STYLE} Stack Overflow\n" | sed -e "s/\x1b\[[01][0-9;]*m//g" | od -ta

tmb3ates

tmb3ates2#

仅在标准输出为端子时添加颜色:

if [ -t 1 ]; then
    # Terminal
    RED_BOLD="\033[1;31m"
    GREEN_BOLD="\033[1;32m"
    RESET_STYLE="\033[00m"
else
    # Not a terminal; disable color
    RED_BOLD=
    GREEN_BOLD=
    RESET_STYLE=
fi

相关问题