“dircolors”在这里可以代替“eval `”dircolors`”`“吗?

“dircolors”在这里可以代替“eval `”dircolors`”`“吗?

我正在检查 .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`"

也就是说,您需要评估 的输出dircolorsdircolors输出由 shell 评估的代码,例如:

LS_COLORS='...'
export LS_COLORS

这就是您想要评估的代码。eval dircolors就像 一样dircolors,因此它将仅dircolors在其输出不重定向的情况下运行,因此上面的 shell 代码最终将被显示,并且不会被任何 shell 评估。

另外,如果$LS_OPTIONS旨在包含lsshell 语法中的选项列表,例如接受诸如 之类的内容--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}'

相关内容