是否有一个技巧(可能是zsh
函数)可以制作单身的 grep
命令会这样表现吗?
如果
grep
输出写入终端,或者通过管道传输到另一个命令(通常less -R
)-> 使用颜色如果
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的,该函数应该在 Linux 中工作。一般来说(在其他系统上)体验/dev/stdout
可能会有所不同。