直到这个月,我的shell还很简单(主要是带有别名的.bashrc或.bash_profile ),但是我一直在重构它,以便根据是否使用zsh和bash来获得不同的行为。它们首先提供一个通用的shell配置文件,该文件应该适用于任何东西,然后专门处理正在使用的特定shell (I符号链接到这个文件)。
今天,当ls停止工作时,我很惊讶。原来在重构.bashrc的过程中,有一个别名
alias ls='ls --color=always'这破坏了ls在OSX终端上的业务。一旦我看到BSD ls喜欢-G的颜色,但是GNU (或者Ubuntu上的任何东西)都喜欢--color,很明显有很多不同的选项。
我的问题是,什么是解释BSD和GNU核心用途之间的选项差异的最佳方法?我是否应该测试if块中的env变量,以查看所使用的操作系统并应用正确的行为?还是为每个操作系统创建单独的配置文件更有意义?
虽然对这些问题的回答可能是主观的,但似乎对BSD和GNU核心用途之间的差异范围进行了详细分析,并制定了解决这些问题的策略,以便使一个通用配置在大多数*nix上可用,这是相当客观的。
发布于 2013-12-07 05:26:22
编写支持不同操作系统的脚本的唯一可靠方法是只使用POSIX定义的特性。
对于您的个人shell配置,您可以使用适合您特定用例的hacks。像下面这样的东西是丑陋的,但会实现目标。
if ls --version 2>/dev/null | grep -q 'coreutils'; then
alias ls='ls --color=always'
else
alias ls='ls -G'
fi发布于 2014-03-18 15:03:43
不是直接回答您的问题,但是我有包装脚本来处理这样的事情,而不是在.bashrc中处理额外的复杂问题--例如,我的L脚本以跨平台的方式处理您的问题:
http://www.pixelbeat.org/scripts/l
https://unix.stackexchange.com/questions/104098
复制相似问题