在 ls 输出中为硬链接着色吗?

在 ls 输出中为硬链接着色吗?

我如何自己给硬链接上色?事实证明,在我拥有的旧版 Ubuntu 10.04 上,默认情况下会发生这种情况(相同.bashrc.profile正在使用中),而在较新的 Ubuntu 12.04 上则不会发生这种情况。

这是 Ubuntu 10.04(我想要的)上的输出:

对硬链接文件进行彩色输出

这是 Ubuntu 12.04 上的输出: 缺少硬链接文件的彩色输出

然而,相关文件是.vimrc.viminfo是一个链接数为 1 的普通文件,与硬链接的文件不同.vimrc

当然,GNUcoreutils使用 texinfo 页而不是手册页这一事实并没有让事情变得更容易。我发现这里,但它并不涉及我正在寻找的情况。

总结:如何在各种 Ubuntu 版本中以我喜欢的方式实现对硬链接(如:链接数 > 1)文件的着色。

答案1

做这个:

LS_COLORS="mh=44;37" ls -l

并且您可以编辑您的内容以进行相应的~/.profile更改LS_COLORS

背景

此功能2008 年起默认启用2009 年默认禁用。不知何故,Ubuntu 10.04 的冻结恰好发生在这两个时刻之间。

使用coreutils 的 Git 存储库我看到从 7.5 版开始就提交了恢复自动着色的提案:

git tag --contains 0df338f6719ec2bcf1e1dea2d8b12dc66daf8a1e
v7.5
v7.6
[...]

在 7.1 之前的版本中似乎没有上游维护对此的支持:

git tag --contains 1e48b1fee5fa2ad2d1802771eafbfcddb38a24cb
v7.1
v7.2
[...]

源文件multihardlink.sh,引导我找到准确的LS_COLORS值以再次启用它。

你可能想重新打开LP 错误 #123423

答案2

根据 gertvdijk 的回答,我想出了以下符合我需求的片段:

if [[ -e "/etc/debian_version" ]] && type dircolors > /dev/null 2>&1; then
    command dircolors|command grep -q 'hl=' && export LS_COLORS="ln=01;36:hl=00;36"
    command dircolors|command grep -q 'mh=' && export LS_COLORS="ln=01;36:mh=00;36"
fi

编辑:我实际上必须重写该片段(参见编辑历史)。

事实证明ls 燕子管道传输时的错误输出LS_COLORS。至少我无法grep对它进行检查,无论2>&1有没有。因此进行了更改。我们检查是否dircolors可用。如果是,则预计会输出一段 shell 代码(默认情况下与 Bourne shell 兼容),其中包含各种已识别文件类型的默认值。因此,我们分别检查hl=mh=的输出dircolors。这样,我们就可以相应地检测出ls和所期望的是什么。对和分别进行检查export LS_COLORS可能更安全,以排除以或结尾的文件扩展名与我们的条件匹配的可能性。grep:hl=:mh=hlmh

上述颜色为黑色上的浅青色(表示软链接)和默认黑色上的深青色(表示硬链接)。

当然,您可以改变顶层条件。我目前只在 Debian/Ubuntu 上设置它,因为我现在没有时间在较旧的 RHEL/CentOS 系统上测试它。

注意:通过调用command可以解决与我们在此尝试使用的工具同名的潜在别名/函数。

相关内容