【问题标题】:How do you determine what bash ls colours mean?您如何确定 bash ls 颜色的含义?
【发布时间】:2010-10-10 12:45:54
【问题描述】:

当您在 bash shell 中执行 ls 时,有时会有颜色表示不同的资源类型,您可以使用 --color 参数启用/控制它。

但是手册页和谷歌都没有提供这个问题的答案:

这些颜色默认表示什么,如何显示当前系统使用的内容?


更新:

到目前为止,感谢大家的回答,但是为了更容易挑选获胜者,任何人都可以更进一步并提供一种方法来输出他们适用的颜色的描述。

嗯...我的示例在发布时不起作用(仅在预览时),因此如果您预览此代码,它将显示我的意思...

<ul style="list-style:none; background:black; margin:0;padding:0.5em; width:10em">
  <li style="color:blue">directory</li>
  <li style="color:aqua">symbolic link</li>
  <li style="color:#A00000;">*.tar files</li>
  <li style="color:white">...</li>
</ul>

谢谢。

【问题讨论】:

    标签: linux shell ls ls-colors


    【解决方案1】:

    颜色由$LS_COLORS 环境变量定义。根据您的发行版,它会在 shell 启动时自动生成,使用 ~/.dircolors/etc/DIR_COLORS

    编辑:

    要列出颜色含义,请使用以下脚本:

    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')
    {
      IFS=:
      for i in $LS_COLORS
      do
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"
      done
    }
    

    【讨论】:

    • 我相信它使用 BOTH - 默认设置在 DIR_COLORS 中,并且 ~/.dir_colors 中的任何内容优先。
    • 也许...我不知道其他发行版,在Fedora中,它设置在/etc/profile.d/colorls.sh中,它只读取其中一个。
    • 这是一个不错的脚本,但我也希望能够看到您未列出的扩展程序的颜色。
    • @Ian:所有扩展?这个集合几乎是无限的,没有任何意义。没有特定颜色的文件使用脚本列出的“普通文件”颜色。
    • /etc/DIR_COLORS.xterm 关于远程访问的 redhat 衍生产品。否则你会愚蠢地试图弄清楚为什么 DIR_COLORS 已经设置为 1;34 并且环境仍然报告 0;34
    【解决方案2】:

    运行命令dircolors -p 将打印所有默认颜色设置。 见http://linux.about.com/library/cmd/blcmdl1_dircolors.htm

    【讨论】:

    • "dircolors -p" 打印默认值,而不是当前设置
    【解决方案3】:

    您应该能够在 /etc/DIR_COLORS 中看到映射列表。您可以通过在主目录中创建 .dir_colors 来覆盖它。

    【讨论】:

      【解决方案4】:

      试试“man 5 dir_colors”看看它是如何在你的系统上设置的。我的没有 /etc/DIR_COLORS 所以它必须设置在其他地方。

      【讨论】:

        【解决方案5】:

        Google for LS_COLORS 获取一些有用的链接。

        编辑:要列出颜色,这个简单的 bash 脚本可能会给出一个想法:

        IFS=:
        set $LS_COLORS
        for C in $*
        do
            IFS='='
            set $C
            echo -e "\033[$2m$1\033[00m"
        done
        

        【讨论】:

        • 谢谢尼尔......不幸的是,没有办法接受次要/部分答案,而朱利亚诺的答案稍微更完整。
        猜你喜欢
        • 1970-01-01
        • 2020-03-06
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 2018-11-18
        相关资源
        最近更新 更多