ZBLOG

#!/bin/bash if [ -t 1 ]; then RED=$(tput setaf 1) GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3) BLUE=$(tput setaf 4) BOLD=$(tput bold) RESET=$(tput sgr0) else RED="" GREEN="" YELLOW="" BLUE="" BOLD="" ...

要让通过 vi 查看日志文件时显示颜色代码(ANSI escape codes),你需要确保 vi(或 vim)能够识别并正确渲染这些颜色序列。默认情况下,vi 可能不会解析 ANSI 转义码,但你可以通过以下方法实现:


方法一:使用 vim 的 ANSI 颜色插件

  1. 安装 vim(如果尚未安装):

    sudo apt-get install vim   # Debian/Ubuntu
    sudo yum install vim       # CentOS/RHEL
    
  2. 安装插件(如 AnsiEsc.vim

    • 下载插件:
      
      wget https://www.vim.org/scripts/download_script.php?src_id=14498 -O AnsiEsc.vba.gz
      gunzip AnsiEsc.vba.gz
      vim AnsiEsc.vba
      
    • 在 Vim 中执行:
      
      :source %
      :q
      
    • 或者手动安装(将 AnsiEsc.vim 放到 ~/.vim/plugin/ 目录)。
  3. vi/vim 中打开文件后启用插件

    :AnsiEsc
    

方法二:使用其他工具转换 ANSI 颜色为高亮

如果你不想修改 vim 配置,可以用以下工具预处理日志文件:

1. 使用 ansi2txtansifilter 去除颜色代码(但会失去颜色):

# 安装 ansifilter
sudo apt-get install ansifilter   # Debian/Ubuntu

# 转换文件(去除颜色代码)
ansifilter < logfile.txt > logfile_no_color.txt
vi logfile_no_color.txt

2. 使用 less -R 查看原始颜色(推荐):

less -R logfile.txt
  • -R 选项会让 less 解析并显示 ANSI 颜色代码。

⭐️推荐方案:直接使用 less -R

最简单的方法是直接用 less -R 查看日志文件,而不用 vi

less -R your_log_file.log

这样既能保留颜色,又无需额外配置。


❗注意:输出到文件时保留颜色的条件

你的脚本中已经通过条件判断([ -t 1 ])检测标准输出是否为终端(TTY)。
当重定向到文件时,由于标准输出不是终端,颜色变量会被设为空字符串,因此生成的日志文件本身不会包含颜色代码
如果你希望日志文件中保留颜色代码(即强制输出颜色),可以移除条件判断部分:

修改后的脚本(始终输出颜色代码):

”`bash #!/bin/bash

移除条件判断,始终设置颜色变量

RED=\((tput setaf 1) GREEN=\)(tput setaf 2) YELLOW=\((tput setaf 3) BLUE=\)(tput setaf


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=8467

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?