我观察到,某些命令行工具(例如Linux 的现代发行版上的paste
和)的默认版本与.这导致sed
OSX
答案OS X
尽管它们可以在几乎所有 Linux 发行版上运行,但 它们不起作用。
所以我想知道,是否有一种标准方法可以在现代 Linux 发行版上获取标准 Unix 工具的全套OS X
版本,以便我们可以在 OSX 上测试解决方案的正确功能,而无需副本?
答案1
正如评论中提到的,苹果使源代码这些工具的可用版本。许多常用命令都在“shell_cmds”包,而粘贴和 sed 位于“文本命令》。可以获取源代码并编译。
事实上,它们都在 Linux 系统上工作得很好,尽管您经常必须跳到源代码并明确删除特定于 FreeBSD 的测试,特别__FBSDID("...");
是几乎每个文件中的行。我不知道有哪个发行版可以将这些打包起来。许多发行版确实打包了一些常用工具的 BSD 版本,这些工具与 OS X 版本非常接近(通常相同),尽管它们通常不包含诸如 Paste 和 sed 之类的东西。例如,Debian 包括八个包称为bsdX
(其中没有一个有这些命令)。特别是对于 Apple 的版本,或者对于其中未包含的许多工具,当您需要根据上面的说明自行构建它们并不困难。
综上所述,GNU 和 BSD 工具的共同子集是POSIX规范,其中定义了所有基本命令。你可以查一下粘贴命令或者sed并看看它保证在所有地方都接受哪些参数。这是编写可移植代码的“道德上正确”的方式:GNU 工具和 BSD 工具都有扩展,但如果您停留在 POSIX 范围内,您的代码将在这两种工具上运行。所以检查您是否始终仅使用 POSIX 参数然后你所说的应该同样适用于 OS X 和其他系统。
答案2
虽然大多数OSX 的 unixy 工具是开源的,许多工具的源代码依赖于 Linux 上不存在的库和内核功能(并且不是开源的,并且如果不付出额外的努力并且可能违反许可证,则无法在非 Apple 硬件上运行)。我怀疑您是否能够在 Linux 上运行它们而不需要付出很大的努力。
OSX的unix层移植自自由BSD许多程序与 OSX 发布时当前的 FreeBSD 版本中的程序非常相似。您可以在虚拟机中运行 FreeBSD 并在那里进行测试。你也可以运行开放BSD; OpenBSD 注重安全性,在采用新功能方面比 FreeBSD 保守得多。如果您想测试脚本的可移植性,您还可以安装印第安纳公开赛,这是一个开源分支索拉里斯基于现已停产的 OpenSolaris 版本。由于 Solaris 是系统V基于 Solaris 和 OpenBSD,您可以对 Unix 可移植性有一个相当广泛的了解。
您还可以在线查看许多 Unix 变体的文档: