我对 MacOS 作为开发平台感到非常满意,它有点类似于 Linux 命令行,但也有一些值得注意的例外:
所有命令:参数解析行为不同。Linux 将接受任何顺序的标志,包括文件后面的标志。在 MacOS 中,文件后面的标志将被忽略;标志必须在任何文件名之前显示
base64:默认情况下未安装。一旦安装,将不接受 Linux 上忽略 base64 编码文本中空格所需的“-i”标志。
sed:MacOS 处理“-i”标志的方式与 Linux 截然不同(需要一个扩展,该扩展会破坏 Linux 上的脚本)。扩展正则表达式在 MacOS 上为“-E”,在 Linux 上为“-e”
(以及各种其他问题...)
在几乎所有情况下,我都发现 Linux 行为变体更易于使用/功能更强大。有没有办法升级 MacOS 命令行实用程序以使其更类似于 Linux?或者我的想法是错误的,应该喝点 kool-aide?虽然这很小,但当我尝试在 Linux / MacOS 开发箱之间来回移动时,这些故障让我抓狂。
答案1
Darwin 是 Mac OS X 的 Unix 基础,本质上是 BSD 的一种,所以您看到的一些差异就是由此而来的。大多数或所有 Linux 发行版中缺少某些标准工具,可以通过以下方法解决
- 使用包管理器,例如
- MacPorts,或
- Fink;或
- 从源代码安装。
有时软件包落后得令人无法接受。例如,我发现 tmux 1.4 中有一个错误,导致我无法使用它,但 macports 还没有 1.5。因此,在许多情况下,从源代码安装可能更可取。
答案2
各种 GNU 工具可以在 Fink 或 DarwinPorts 或诸如此类的地方找到。
答案3
有一堆“相同”的程序在一个 *nix 中解释选项的方式与在另一个 *nix OS(包括 Linux)中解释相同选项的方式不同。对此我们无能为力。
如果 shell 的内置命令让您感到困扰,请在 shell 中输入 ps -p $$。查看 CMD 下 shell 输出的名称。如果 shell 不同,则只需在 OSX 上安装与 linux 中相同类型的 shell。可以是 tcsh 和 zsh。
答案4
安装自制
“brew 安装 coreutils gnu-sed gnu-tar gnu-getopt gnu-time gnu-which”
然后,所有标准 Linux 内容都可以使用“g”前缀 - 因此使用“gtar”而不是“tar”。
只需一点技巧,就可以在原始 BSD 程序和 GNU/Linux 版本之间切换。例如,设置一个具有符号链接(如 tar --> /usr/local/bin/gtar)的 /usr/local/gnubin。然后首先将该目录放入 PATH 变量中。也可以使用别名,但我不太喜欢与真实程序相同的别名(我发现这很脆弱且容易出错)。