为什么grep在从bash脚本执行时会丢失彩色输出?

时间:2012-09-07 16:08:07

标签: bash colors grep

  

可能重复:
  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时,结果显示紫色的文件名和红色匹配,但现在所有输出都是正常的终端文本颜色。有人能告诉我如何从我的剧本中获取彩色版本吗?

2 个答案:

答案 0 :(得分:11)

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

grep --color=always $@

答案 1 :(得分:8)

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

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