有什么dircolors
影响。仅用于ls
命令吗?应该dircolors
在定义之前调用alias ls='ls --color'
?
答案1
dircolors
输出由 shell 解释的代码。不带选项或带-b
选项时,这意味着类似 Bourne 的 shell,例如 ksh、zsh 或 bash 以及所有现代的sh
,带有-c
,即csh
或tcsh
,它不支持任何其他 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 不再使用,并且其`...`
等效项已被弃用。