我正在尝试使用启动器脚本设置 LS_COLORS 环境变量。然而这个变量没有被设置。
脚步
已下载LS_COLORS到~/.dircolors
添加TERM=xterm-newTerminalEmulator其他所有的地方学期变量在 .dircolors 中定义
在 ~/bin/ls 中创建启动器脚本
使用 shebang 填充此启动器脚本,
eval
将括号中的字符串作为命令传递到 shell,并exec
仅用该进程替换所有进程ls
:#!/bin/sh eval $(dircolors -b ~/.dircolors) exec /bin/ls "$@"
使
~/bin/ls
文件可执行。
dir_colors 的手册页说
通常,这里使用的文件是 /etc/DIR_COLORS 并且可以被主目录中的 .dir_colors 文件覆盖。
考虑到仅使用系统范围的 /etc/DIR_COLORS 脚本,这就是它不起作用的原因吗?
此外
我还有一个别名ls
设置为别名 ls = "ls --color"并echo $LS_COLORS
没有显示任何内容。
系统规格有:fedora28和bash
更新
我得到了这个工作,但我对颜色不满意。默认值更直观,不仅如此LS_COLORS不区分可执行文件和符号链接,这是一个破坏因素。
答案1
文档含糊不清,但设置环境变量还不够:您需要该--color
选项。如果没有选项值,则对应于--color=always
(大多数人期望--color=auto
,它会抑制管道中的颜色)。
您可以看到如何--color
在中查看如何处理该选项ls 的源代码,特别是变量print_with_color
及其相互作用LS_COLORS
。
无论如何,eval
需要该命令来评估 所export
返回的命令dircolors
,并且该环境变量在exec
.您的示例(带有添加的--color
选项)对我来说适用于 bash 和 dash。
答案2
您在子 shell 中运行 dircolors,因此更改仅适用于子 shell 内。
子 shell 是 $( ... )
试试这个吧...
alias ls="dircolors -b ~/.dircolors && ls"