如何使用颜色 (--color=always) 进行 grep,除非将输出重定向到文件

如何使用颜色 (--color=always) 进行 grep,除非将输出重定向到文件

是否有一个技巧(可能是zsh函数)可以制作单身的 grep命令会这样表现吗?

  1. 如果grep输出写入终端,或者通过管道传输到另一个命令(通常less -R)-> 使用颜色

  2. 如果grep输出写入文件 -> 不使用颜色

问题在于grep --color=always,在情况 2 中它的行为不正确。

编辑-让我们换句话说:

  • 我需要mygrep "a" file.txt | less -R输出颜色。
  • 我不需要mygrep "a" file.txt > output.txt输出任何颜色。

在我的 中应该如何mygrep定义.zshrc


答案1

在我的 Kubuntu 中,[ -f /dev/stdout ]可以用来判断 stdout 是否是常规文件。这引出了以下 shell 函数:

mygrep() {
   if [ -f /dev/stdout ]; then
      grep --color=never "$@"
   else
      grep --color=always "$@"
   fi
}

这里没有什么特别的zsh。问题被标记为,该函数应该在 Linux 中工作。一般来说(在其他系统上)体验/dev/stdout可能会有所不同

相关内容