我正在检查 .bashrc 来设置 ls 命令的颜色,发现了这个
export SHELL='/bin/bash'
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
dircolors
如果我使用而不是与 一起使用 会有什么问题吗eval
?有什么不同?
答案1
既不工作eval dircolors
也不dircolors
行。
你需要的是:
eval "$(dircolors)"
(或古代形式eval "`dircolors`"
)
也就是说,您需要评估 的输出dircolors
。dircolors
输出由 shell 评估的代码,例如:
LS_COLORS='...'
export LS_COLORS
这就是您想要评估的代码。eval dircolors
就像 一样dircolors
,因此它将仅dircolors
在其输出不重定向的情况下运行,因此上面的 shell 代码最终将被显示,并且不会被任何 shell 评估。
另外,如果$LS_OPTIONS
旨在包含ls
shell 语法中的选项列表,例如接受诸如 之类的内容--exclude='*~'
,那么您需要将其定义为:
ls() {
eval 'command ls '"$LS_OPTIONS"' "$@"'
}
或者与zsh
:
alias ls='ls "${(Q@)${(z)LS_OPTIONS}}"'
如果它的意思是包含一个以空格分隔的选项列表,则使用 bash 4.4+
ls() {
local IFS=' '
local -
set -o noglob
command ls $LS_OPTIONS "$@"
}
或者与zsh
:
alias ls='ls ${(s: :)LS_OPTIONS}'