dircolors myfile 将 LS_COLORS 设置为屏幕中的空字符串

dircolors myfile 将 LS_COLORS 设置为屏幕中的空字符串

我的 .bashrc 中有一行设置了颜色方案:

eval $(dircolors colorfile) 

这按预期工作,使用“colorfile”生成的正确字符串设置 LS_COLORS。

当我使用 screen 时,会再次读取 bashrc 文件,但我失去了颜色。测试,我dircolors colorfile在屏幕中的命令行中运行,并得到

LS_COLORS='';
export LS_COLORS

我可以很容易地解决这个问题,但我很好奇是什么导致 dircolors 在屏幕上与非屏幕上的行为不同。我以为它只是盲目地解析文件并输出字符串。但它必须检查一些环境变量或其他什么?

有什么线索吗?这里有一些额外的信息:我的 .screenrc 是空白的,我正在使用 gnome-terminal。 Dircolors 版本是 8.25。

我使用该which命令来确保我没有使用两个不同的二进制文件(我没有)。我检查了 $ 的值?运行 dircolors 后,这两种情况都是 0。

答案1

屏幕内 的值$TERM不同。因此,您的colorfile文件可能应该以

TERM screen*
TERM xterm*

答案2

无论如何,旧版本dircolors不支持 TERM 参数的名称通配 — 例如,xterm*不支持,在这种情况下,您必须显式列出您想要支持的每种终端类型(每行一个):

TERM xterm
TERM xterm-16color
TERM xterm-256color
TERM xterm-color
etc.

要快速检查您的版本是否dircolors支持名称通配,请执行以下操作

dircolors --print-database | grep TERM

并检查术语列表中的一个或多个通配名称,例如,

TERM *color*
TERM xterm*

如果您在术语列表中没有看到通配名称(例如,*color*xterm*等),则该版本可能dircolors不支持名称通配。

相关内容