我在我的个人机器上运行 OS/X,在我的远程服务器上运行 Linux。 (即使在他们还在制造 Xserve 的时候,我也买不起 Xserve。)我很乐意为两者使用相同的 .bashrc 文件,并且我想让 ls 显示颜色,以便我可以识别可执行文件、目录和喜欢。
但 Linux 上的 GNUls
希望看到--colors
命令行开关,否则它将拒绝显示颜色。 Apple 的(BSD?)ls
更喜欢看到export CLICOLORS=1
shell 变量来告诉它显示颜色。
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 背后的哲学,这就是为什么configure
10 年前编写的脚本今天可能仍然可以在全新的系统上运行。)
修改别名以适应。我只是展示了我在撰写本文时最接近的 macOS 和 Linux 系统上使用的值。
答案2
你可以检查一下是否是linux,然后进行设置ls
。 IE:
export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
# your linux ls stuff
fi