我的 .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
不支持名称通配。