无法使用脚本在 bash 中设置 LS_COLORS

无法使用脚本在 bash 中设置 LS_COLORS

我正在尝试使用启动器脚本设置 LS_COLORS 环境变量。然而这个变量没有被设置。

脚步

  1. 已下载LS_COLORS到~/.dircolors

  2. 添加TERM=xterm-newTerminalEmulator其他所有的地方学期变量在 .dircolors 中定义

  3. 在 ~/bin/ls 中创建启动器脚本

  4. 使用 shebang 填充此启动器脚本,eval将括号中的字符串作为命令传递到 shell,并exec仅用该进程替换所有进程ls

    #!/bin/sh eval $(dircolors -b ~/.dircolors) exec /bin/ls "$@"

  5. 使~/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"

相关内容