Bri*_*ian 8 ls colors bash alias
我在个人机器上运行 OS/X,在远程服务器上运行 Linux。(即使在 Xserve 还在制造时,我也买不起。)我很想为这两个文件使用相同的 .bashrc 文件,我想让 ls 显示颜色,这样我就可以识别可执行文件、目录和喜欢。
但是ls
Linux 上的 GNU想要看到--colors
命令行开关,否则它会拒绝显示颜色。Apple 的(BSD?)ls
更喜欢查看export CLICOLORS=1
shell 变量来告诉它显示颜色。
我会两者都做,但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 背后的哲学,这就是为什么configure
10 年前编写的脚本今天可能仍然适用于全新系统的原因。)
修改别名以适应。我只是在写这篇文章时展示了我在 macOS 和 Linux 系统上使用的值。