【问题标题】:Why does grep lose colored output when executed from a bash script? [duplicate]为什么 grep 从 bash 脚本执行时会丢失彩色输出? [复制]
【发布时间】:2012-09-07 16:08:07
【问题描述】:

可能重复:
grep loses coloring when run from bash script

我有一个简单的 bash 脚本可以在我的 grep 结果之上打印一个标题:

#!/bin/bash

for var in "$@"
do
    if [[ $var != -* ]];
    then
        break 
    fi
done

echo
echo -en "\e[1;31m     ====== GREP $var ======\e[0m\n"
echo

grep $@

但最终的命令与直接从提示符实际运行grep 不同,因为结果中缺少颜色。直接执行grep 时,结果显示文件名为紫色,匹配项为红色,但现在所有输出都是正常的终端文本颜色。谁能告诉我如何从我的脚本中获取彩色版本?

【问题讨论】:

  • 提示:grep 首先是如何知道输出颜色的?
  • 你试过--color=always吗?
  • 是的,它基本上是重复的……我的错。
  • 顺便说一句,grep $@ 应该是 grep "$@" 以避免将 grep "foo bar" 更改为 grep foo bar

标签: bash colors grep


【解决方案1】:

看起来 grep 在不处于交互模式时不会产生颜色。您可以强制它产生彩色输出:

grep --color=always $@

【讨论】:

  • 需要grep --color=always "$@" 以避免破坏原始命令中的引用。
【解决方案2】:

Grep 有 3 种颜色模式,Auto、Always 和 Off。

当它连接到非交互式输出时,自动去除代码,例如管道(如果您想了解原因,请尝试将 grep --color=always 的输出重定向到文件中,然后查看文件..控制代码无处不在)

【讨论】:

  • 我发现 grep --color 和 --color 选项总是,从不和自动。而且我发现当 grep 的输入已经被着色并且我想保留到输出时,我发现它永远不会有用。
猜你喜欢
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2021-12-23
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多