我可以使用 .bashrc 使 ls 在 OS/X 和 Linux 上显示颜色吗?

Bri*_*ian 8 ls colors bash alias

我在个人机器上运行 OS/X,在远程服务器上运行 Linux。(即使在 Xserve 还在制造时,我也买不起。)我很想为这两个文件使用相同的 .bashrc 文件,我想让 ls 显示颜色,这样我就可以识别可执行文件、目录和喜欢。

但是lsLinux 上的 GNU想要看到--colors命令行开关,否则它会拒绝显示颜色。Apple 的(BSD?)ls更喜欢查看export CLICOLORS=1shell 变量来告诉它显示颜色。

我会两者都做,但ls如果Apple看到一个未知的--colors开关,它就会呕吐。

.bashrc 中有没有好的方法可以让我检测是否ls接受开关,然后决定是否使用它作为别名--colors

War*_*ung 10

当你试图做一些可移植的事情时,测试功能,而不是平台:

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi
Run Code Online (Sandbox Code Playgroud)

当平台改变时平台测试中断。今天,macOS 提供了 BSD 和 GNU 用户空间工具的混合,但随着时间的推移,这种混合正在朝着 BSD 工具的更大优势转变。因此,如果您依赖两个实现不同的功能,当 Apple 用最接近的 BSD 等效工具替换您依赖的 GNU 工具时,今天对“macOS”的测试可能会在明天失败。面对变化,功能测试更经常地保持工作。

作为奖励,您有时最终会为最初没有测试过的平台创建支持。例如,上面的脚本片段也应该在 Solaris 和 FreeBSD 上做正确的事情。

(顺便说一下,这是 GNU Autoconf 背后的哲学,这就是为什么configure10 年前编写的脚本今天可能仍然适用于全新系统的原因。)

修改别名以适应。我只是在写这篇文章时展示了我在 macOS 和 Linux 系统上使用的值。