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