在终端的 grep 中保持 npm 链接文件夹的颜色

Keep npm linked folder color in grep on terminal

我在 node_modules 中有一个文件夹 link 到另一个项目(使用 npm link my-plugin)。我们称它为 my-plugin.

当我 运行 ls node_modules 时,我得到一个包含所有文件夹的列表,当然其中包含 my-pluginmy-plugin 文件夹有不同的颜色(请注意它是 linked)。

现在,我在 node_modules 中有很多文件夹,我只想获取特定文件夹,所以我正在使用 grep。像这样:

ls node_modules | grep my-plugin

问题是 grep 绘制了表达式,所以我缺少 my-plugin 的 linked 颜色。

问题是有时我 运行 我的应用程序使用 link,有时使用原始插件,所以我需要知道它现在是否 linked。

我希望一切都清楚。如果没有,请告诉我。

ls 输出的颜色由 LS_COLORS 环境变量决定,通常通过评估 dircolors -b 的输出在 .bashrc 中设置,或者使用自定义文件,如 dircolors -b "$HOME/.dircolors"。我的包含,例如,

# Symbolic link
LINK 35

将链接呈现为紫色。

另一方面,

Grep 根据 GREP_COLORS 环境变量对其输出进行着色。它是一串冒号分隔的功能;我的 grep 的默认值是

ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36

重要的部分是ms=01;31:它设置

SGR substring for matching non-empty text in a selected line.

其中 "SGR" 是 "Select Graphic Rendition"; 01;31 将 grep 匹配的模式设置为默认背景上的粗体红色。

因此,无论 LS_COLORS 将您的链接目录设置为什么,grep 将始终使用自己的颜色进行匹配,因为它无法知道它正在查看的文本的含义。

解决方法是使用 find:

过滤类型
find node-modules -type l -name 'my-plugin'

仅当链接是 return 时才会匹配。