【问题标题】:Does Darwin/MacOS modify Bash?Darwin/MacOS 是否修改了 Bash?
【发布时间】:2012-05-12 05:09:09
【问题描述】:

我想知道使用 Bash 内置命令的 Bash 脚本的可移植性。

我了解每种 UNIX 风格都倾向于修改各种 UNIX 实用程序。但他们是否倾向于单独留下 Bash 和 Bash 内置程序?尤其是 MacOS 呢?

【问题讨论】:

  • 我想是的。 Bash 已经存在了很长时间,在这一点上非常非常稳定,并且没有添加新功能。那为什么会有人搞砸呢???
  • @ControlAltDel:实际上,bash v4.0 中添加了一些 OS X 版本 (3.2) 没有的重要功能(例如关联数组)。

标签: macos bash portability


【解决方案1】:

Apple 使用的是相当旧的 Bash 版本,因为他们不发布根据 GPL3 许可的代码。您可以下载当前版本from Apple's open source site,并看到它至少声称是 vanilla Bash 3.2(尽管显然已经添加了 Xcode 项目)。

【讨论】:

  • 似乎找不到来自 darwin 开发人员的任何笔记,所以可能是库存。我希望有一个明确的方法来知道。
【解决方案2】:

据我所知,bash 在 Mac OS X 上没有被修改(除了使其编译所需的细微调整;您可以在 http://opensource.apple.com/ 上查看源代码),并且脚本应该非常便携。

正如 Graham Lee 和 Gordon Davisson 所指出的,Mac OS X 附带旧版本,支持的版本之间存在差异。 Bash 4 有关联数组和other changes。 Bash 3 包括正则表达式匹配(可能还有其他我没有搜索过的)。不记得 Bash 2 的差异,也许是一些括号/条件测试差异?

Mac OS X 10.7.x Lion 包括 Bash 3.2.x。我不记得我脑海中的确切版本,但 Mac OS X 10.6.x Snow Leopard 和 10.5.x Leopard 包括 Bash 3.x。 Mac OS X 10.4.x Tiger 和更早的版本使用 Bash 2.0.5。因此,您肯定会遇到默认支持的内容之间的差异。

当然,除了 Mac OS X 上不同 bash 版本的功能集和内置程序之间的差异之外,您还会发现其他工具的差异。例如,Mac OS X 上存在 getopt 问题(在 Mac OS X 目录/文件路径中经常出现的空格,在参数中不受支持;较新的 bash 版本中的内置 getopts 可以提供帮助有这个,但在旧版本中可能不可用)。当然,也会有其他具有不同功能或语法的工具。

我绝对不是专家bash 开发人员,但我编写了一些 支持各种版本的Mac OS X 特定脚本。有关 2.x 与 3.x 正则表达式功能和解决方法的讨论,请参阅我的 Regular Expressions in Bash and Alternatives 文章。或者,我的一些 bash 脚本已经非常重视 Mac OS X:tools-osx & bash_stub

【讨论】:

    【解决方案3】:

    bash 版本 4 未在 Darwin 或 MacOS Lion 上提供。 所以mac不支持对read命令等的改进,很遗憾。

    cygwin 有 bash 4.1.10

    【讨论】:

    • 这如何回答这个问题?
    • 提问者询问了 bash 和 MacOS。不要屏住呼吸等待 Apple 使用最新版本的 bash。
    • 截至 2017 年 3 月 5 日,Apple 正在发布 GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin16) 版权所有 (C) 2007 Free Software Foundation, Inc. 所以基本上落后十年。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2019-02-24
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多