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

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

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

但 Linux 上的 GNUls希望看到--colors命令行开关,否则它将拒绝显示颜色。 Apple 的(BSD?)ls更喜欢看到export CLICOLORS=1shell 变量来告诉它显示颜色。

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

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

答案1

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

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

当平台发生变化时,平台测试就会中断。 macOS 目前提供了 BSD 和 GNU 用户区工具的组合,但这种组合是随着时间的推移而变化争取 BSD 工具的更大优势。因此,如果您依赖于两者以不同方式实现的功能,那么当 Apple 将您所依赖的 GNU 工具替换为最接近的 BSD 等效工具时,今天对“macOS”的测试可能会失败。面对变化,功能测试通常会继续发挥作用。

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

(顺便说一句,这就是 GNU Autoconf 背后的哲学,这就是为什么configure10 年前编写的脚本今天可能仍然可以在全新的系统上运行。)

修改别名以适应。我只是展示了我在撰写本文时最接近的 macOS 和 Linux 系统上使用的值。

答案2

你可以检查一下是否是linux,然后进行设置ls。 IE:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi

相关内容