彩色 grep 输出被 watch 命令分割

Bła*_*lik 5 grep colors watch

我正在尝试运行watch,以便在我运行文件和更改内容时向我显示 grep 命令的输出。

这样做的通常方法可以正常工作,但缺少颜色:

watch grep 'something' **/*
Run Code Online (Sandbox Code Playgroud)

...因为我确实想要颜色,所以我这样做了:

watch grep 'something' **/* --color=always
Run Code Online (Sandbox Code Playgroud)

它仍然很难看,因为 watch 不会解析使颜色起作用的转义码。然后我发现了这个:

watch --color grep 'something' **/* --color=always
Run Code Online (Sandbox Code Playgroud)

嗯......它不起作用。输出以某种奇怪的方式分散/混合。由于某种原因,它只显示了一行,而没有watch --colorgrep 输出大约 20。

如何watch使用来自 的彩色输出grep


孤立案例:

使用以下内容:

mkdir grep_test; cd grep_test
echo "asdsad\nasdasd\nsaasdasd" > file1 
echo "test\n123\ntest" > file2
Run Code Online (Sandbox Code Playgroud)

我创建了两个文件,然后运行以下命令:

grep test * --color=always
Run Code Online (Sandbox Code Playgroud)

它按预期工作,并输出(带有颜色和诸如此类):

file2:test
file2:test
Run Code Online (Sandbox Code Playgroud)

但是当我使用手表时:

watch --color 'grep test * --color=always'
Run Code Online (Sandbox Code Playgroud)

它什么都不输出。如果没有该--color选项,它会显示正确的输出,但没有解释 ANSI 转义符。我在 Fedora 25 上运行它,在里面有 zsh 的 tmux 会话中。

此外,watch -v输出是:

watch from procps-ng 3.3.10
Run Code Online (Sandbox Code Playgroud)

Ser*_*suk 6

事实证明,手表确实支持颜色输出。但特别是对于grep你应该做一些解决方法(根据grep --color 添加 ANSI 代码 ESC[K - 这可以更改显示的文本

watch --color "GREP_COLORS=ne grep --color=always .* *"
Run Code Online (Sandbox Code Playgroud)