我如何自己给硬链接上色?事实证明,在我拥有的旧版 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=
hl
mh
上述颜色为黑色上的浅青色(表示软链接)和默认黑色上的深青色(表示硬链接)。
当然,您可以改变顶层条件。我目前只在 Debian/Ubuntu 上设置它,因为我现在没有时间在较旧的 RHEL/CentOS 系统上测试它。
注意:通过调用command
可以解决与我们在此尝试使用的工具同名的潜在别名/函数。