已知的内置命令在 Linux 和 Mac 中的工作方式不同

已知的内置命令在 Linux 和 Mac 中的工作方式不同

在开发 Bash 脚本时,有时我会在 Docker 容器中或 VM 上运行它来测试它,但对我来说构建脚本的理想位置就是我本地的 MacOS 工作站。

说到 Bash 脚本,到目前为止这从来都不是问题。但是今天我注意到该date命令在 Linux 和 MacOS 之间的行为不同。

示例场景,向日期对象添加天数:

Linux:

root@host$ date -d "$(date) 3 days" +%Y-%m-%d
2018-04-20

苹果系统:

WS:tmp user$ date -d "$(date) 3 days" +%Y-%m-%d
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

不起作用,所以我必须重新格式化它:

WS:tmp user$ date -j -v +3d -f "%Y-%m-%d" $(date +%Y-%m-%d) +%Y-%m-%d`
2018-04-20

太麻烦了!一个简单的 bash 脚本,现在我需要一个容器或 VM 才能进行一些简单的日期操作。

这让我感觉自己以这种方式进行开发是搬起石头砸自己的脚,而我购买 Mac 的全部原因是因为它比任何 Windows 版本都更接近 'nix 环境,所以我可以在它上面进行简单的本地开发。

我的问题:

  • 这是授权问题吗?据我了解,这date是一个 GNU 实用程序,因此不应该存在任何授权问题。
  • 因为直到今天我还没有遇到这个问题,有没有已知的常见的行为不同的应用程序?
  • 在 Mac 上开发一些 bash 脚本是“不好的做法”吗?我已经这样做了一段时间,到目前为止从未遇到过问题。

感谢您对这个主题的经验,谢谢!

答案1

正如您所发现的,不同的操作系统会安装不同的工具。如果您的主要重点是为 Debian 或 CentOS 等操作系统开发脚本,那么我会高度建议您使用该环境来执行此操作。无论是在 VM、云托管 VPS 还是 Docker 容器中,都由您决定。

最多在某些情况下,macOS 和各种 Linux 发行版之间的行为是相同的,但并非总是如此。

或者,你可以使用 brew 之类的工具酿造安装主线版本的工具,而不是 macOS 专用的。这显然还有其他注意事项,因为与 macOS 上的工具重叠的工具默认情况下不会链接,您必须覆盖它们,但这是可行的(这可能会破坏某些功能,因此请小心)。您也可以自行编译它们。

我不知道 Linux 和 macOS 之间的区别列表。这还取决于您要将其与哪个版本的 Linux 进行比较。

相关内容