Linux

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

  • April 17, 2018

在開發 Bash 腳本時,有時我會在 Docker 容器或虛擬機上執行它來測試它,但我建構腳本的理想場所就是在我的本地 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 腳本,現在我需要一個容器或虛擬機來進行一些簡單的日期操作。

這讓我覺得我正在以這種方式開發自己的腳,而我得到 Mac 的全部原因是因為它比任何 Windows 版本更接近 ’nix 環境,所以我可以在其上進行簡單的本地開發。

我的問題:

  • 這是許可問題嗎?我的理解date是 GNU 實用程序,所以不應該有任何許可問題。
  • 因為直到今天我還沒有遇到這個問題,是否有一個已知的行為不同的常見應用程序列表?
  • 在 Mac 上開發一些 bash 腳本是“壞習慣”嗎?我已經做了一段時間了,直到現在才遇到問題。

感謝您對該主題的經驗,謝謝!

如您所見,不同的作業系統將安裝不同的工具。如果您的主要重點是為 Debian 或 CentOS 等開發腳本,那麼我強烈建議您使用該環境來執行此操作。無論是在 VM、雲託管 VPS 還是 Docker 容器中,都取決於您。

大多數情況下,macOS 和各種 Linux 發行版之間的行為是相同的,但並非總是如此。

或者,您可以使用諸如 brew brew之類的工具來安裝工具的主線版本,而不是 macOS 特定的工具。這顯然還有其他警告,因為與 macOS 上的工具重疊的工具預設情況下沒有連結,您必須覆蓋它們,但它是可行的(它可能會破壞事情,所以要小心)。您也可以自己編譯它們。

我不知道 Linux 和 macOS 之間的區別列表。它還取決於您要與哪個版本的 Linux 進行比較。

引用自:https://serverfault.com/questions/908124