首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell配置脚本中,我如何解释BSD上的coreutils与GNU的差异?

在shell配置脚本中,我如何解释BSD上的coreutils与GNU的差异?
EN

Unix & Linux用户
提问于 2013-12-07 04:55:23
回答 2查看 673关注 0票数 9

直到这个月,我的shell还很简单(主要是带有别名的.bashrc.bash_profile ),但是我一直在重构它,以便根据是否使用zsh和bash来获得不同的行为。它们首先提供一个通用的shell配置文件,该文件应该适用于任何东西,然后专门处理正在使用的特定shell (I符号链接到这个文件)。

今天,当ls停止工作时,我很惊讶。原来在重构.bashrc的过程中,有一个别名

代码语言:javascript
复制
alias ls='ls --color=always'

这破坏了ls在OSX终端上的业务。一旦我看到BSD ls喜欢-G的颜色,但是GNU (或者Ubuntu上的任何东西)都喜欢--color,很明显有很多不同的选项。

我的问题是,什么是解释BSD和GNU核心用途之间的选项差异的最佳方法?我是否应该测试if块中的env变量,以查看所使用的操作系统并应用正确的行为?还是为每个操作系统创建单独的配置文件更有意义?

虽然对这些问题的回答可能是主观的,但似乎对BSD和GNU核心用途之间的差异范围进行了详细分析,并制定了解决这些问题的策略,以便使一个通用配置在大多数*nix上可用,这是相当客观的。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2013-12-07 05:26:22

编写支持不同操作系统的脚本的唯一可靠方法是只使用POSIX定义的特性。

对于您的个人shell配置,您可以使用适合您特定用例的hacks。像下面这样的东西是丑陋的,但会实现目标。

代码语言:javascript
复制
if ls --version 2>/dev/null | grep -q 'coreutils'; then
    alias ls='ls --color=always'
else
    alias ls='ls -G'
fi
票数 9
EN

Unix & Linux用户

发布于 2014-03-18 15:03:43

不是直接回答您的问题,但是我有包装脚本来处理这样的事情,而不是在.bashrc中处理额外的复杂问题--例如,我的L脚本以跨平台的方式处理您的问题:

http://www.pixelbeat.org/scripts/l

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/104098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档