dircolors 的效果

dircolors 的效果

有什么dircolors影响。仅用于ls命令吗?应该dircolors在定义之前调用alias ls='ls --color'

答案1

dircolors输出由 shell 解释的代码。不带选项或带-b选项时,这意味着类似 Bourne 的 shell,例如 ksh、zsh 或 bash 以及所有现代的sh,带有-c,即cshtcsh,它不支持任何其他 shell²。

输出代码指示 shell 设置$LS_COLORS环境变量,该变量由 GNU 实现查询,以在使用选项ls调用时自定义其着色输出--color

在类似 Bourne² 的 shell 中,你会这样做:

eval "$(dircolors -b)"

评估输出dircolors

在 (t)csh 中:

eval "`dircolors -c`"

$LS_COLORS变量必须在ls --color调用之前设置,但与使用的别名或函数的定义无关ls。所以:

alias ls 'ls --color' # (t)csh
alias ls='ls --color' # Korn-like shells
ls() command ls --color "$@" # most Bourne-like shells
ls() { command ls --color "$@"; } # all Bourne-like shells

可以放在对 的调用之前或之后eval,没有区别。

由于它会更新环境,因此只需将该eval行放入~/.profile/ ~/.login(或登录 shell 的等效登录会话自定义文件)中,因此每个登录会话仅设置一次,而别名/函数应通过 shell 自定义文件设置(~/.zshrc, ~/.cshrc, ~/.bashrc...)。

无论如何,如果您不使用dircolors,您仍然会获得颜色,只是默认颜色。在dircolors没有自定义文件的情况下使用时,您将获得不同的默认值。

您可以通过执行以下操作来编辑这些默认值:

dircolors -p > ~/.config/dircolors

编辑该文件并使用以下命令更改 shell 启动文件中的行:

eval "$(dircolors ~/.config/dircolors)"

1 对于其他 shell 有很多解决方法,但你只能靠自己了。例如,对于最新fish版本,您可以这样做set -x LS_COLORS "$(sh -c "$(dircolors -b)"'; printf %s "$LS_COLORS"')"

² 除了 Bourne-shell 本身没有,$(...)但 Bourne shell 不再使用,并且其`...`等效项已被弃用。

相关内容