Linux和Mac OS中的Bash


27

我正在购买iMac。我已经在Linux上工作了很长时间,并且做了很多bash脚本编写。我想知道Mac OS上是否所有bash命令和功能都可用?任何人都具有Mac bash脚本编写经验吗?感谢您的投入。

Answers:


32

Bash本身将基本相同。会有一些细微的差异,但是这些差异都不会影响脚本的可移植性。

主要问题是MacOS coreutils基于FreeBSD,而您习惯使用的实用程序很可能来自GNU项目。FreeBSD coreutils并不总是与GNU coreutils兼容。GNU和FreeBSD版本的sedgrepps其他实用程序之间在性能和行为上存在差异。

你可以安装GNU的coreutils,但他们有g-前缀(例如gcat对于cat)。这不是一个好主意的GNU的coreutils更换的MacOS的coreutils。


6
应该放大使用基于FreeBSD的标准核心实用程序影响脚本的可移植性(例如,ps具有不同的标志,就像一样grep)。我已经撞了几次墙,试图弄清楚为什么我的Ubuntu脚本在Mac上无法产生相同的输出。
克里斯·格雷格

1
如果要编写可移植的脚本,请访问www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp是获取POSIX和XCU实用程序和命令的严格标准规范的好地方。
kojiro

@ChrisGregg:我同意。我在回答中添加了一些内容,以强调这两个工具集之间不兼容。

5

如果有问题,bash在Mac OS X上,Mountain Lion仍为3.2版。如今,大多数Linux发行版均随附4.x,因此您将缺少版本4的功能。当前,Homebrew提供了4.2.45版作为解决方法。我不知道Mavericks中的版本是什么,我不确定知道的人允许说什么。

正如其他人提到bash的一样bash(除了已经提到的版本),但Mac OS X使用(主要是)BSD用户态。许多标准系统实用程序的选项略有不同,或行为也有所不同。不幸的是,他们太多了,无法在此处列出。


2
4年后,High Sierra上的bash仍在使用:GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin17)版权所有(C)2007自由软件基金会,公司
Nate Lockwood

4

安装homebrew(软件包管理器),然后安装一些基本实用程序的gnu版本:

$ brew install coreutils
$ brew install gnu-sed

每次安装后,它将显示您可以遵循的步骤,以便您可以简单地调用date而不是gdate例如进行调用,以便您仍可以使用Linux bash脚本而无需进行任何修改。

恭喜,您已经解决了99%的跨平台脚​​本问题。


3
另一方面,如果脚本实际上是可移植的,则需要修复脚本,而不是症状。
2013年

2

从Linux到Mac可能令人沮丧的一件事是,没有/proc伪文件系统。这破坏了我的许多Linux脚本,并且很难找到合适的方法来获取与procMac bash脚本中相同的信息。


0

我是“主要是linux,偶尔是mac”用户,我发现:

庆典,~/.bashrc~/.bash_aliases大部分工作相同。

我发现的一个问题是更改颜色提示的命令之一在Mac上不起作用。通过这些经验和其他经验,我学会了在设置.bashrc文件时保持终端窗口打开并登录。那就是我可以测试“新窗口”并在仍然登录的窗口中找到任何错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.