將 OS X 的 shell 指令替換為 linux 版本?

將 OS X 的 shell 指令替換為 linux 版本?

OS X 終端機中預設提供的命令似乎與 Linux 版本不同。我怎樣才能將它們全部替換為實際的 GNU linux 命令?

例如 sed -i 需要一個令人困擾的附加「」參數。此外,它僅適用於文字檔案。這是沒用的。

答案1

在一般情況下,您不能(或不應該) 完全替換預設指令。原因是許多系統管理腳本和第三方軟體包可能依賴這些命令來按照它們在 OS X 上開箱即用的方式運行。

因此,如果您只是刪除系統命令並將其替換為具有不相容行為或命令列參數的 GNU 等效命令,則可能會破壞某些內容。特別是如果您使用一些最初設計為在 Linux 或 BSD 上運行後「移植」到 Mac OS X 的軟體,因為這些類型的程式更有可能依賴 shell 腳本和系統命令,而不是呼叫 OS X API。

你什麼要做的是安裝一個在另一個目錄中安裝 GNU 實用程式的環境,而不覆蓋預設值,然後調整你的PATH環境變數因此,在搜尋系統目錄之前,它會優先考慮在 GNU 目錄中找到的指令。您可以將其連接起來,以便僅在啟動互動式 shell 時才以這種方式設定 PATH;如果你想這樣做,你可以用谷歌搜尋如何做到這一點bash,或者在 SU 上問另一個問題(或者搜尋它,因為之前可能已經被問過)。

這種環境的例子是自製例如,sed其中有 GNU。安裝 Homebrew 後,您可以輸入

brew install coreutils

並安裝GNU Coreutils。這些將為sed您提供GNU/Linux 附帶的許多其他工具,date但不包括OS X。因此,安裝 Coreutils 後,如果您想使用 GNU sed,請鍵入printfwcg

gsed

如果每次都輸入太麻煩,您可以將「gnubin」目錄新增到您的 PATH 中,然後使用 .gnubin 呼叫 GNU sed sed。您需要將以下內容添加到您的~/.bash_profile

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

當然,如果您需要一個從頭到尾的 Linux 環境(核心、X11、系統呼叫相容性等),您必須在虛擬機器中執行 Linux,例如虛擬盒子。如果您需要執行設計為在 Linux 上執行的軟體或腳本,這是一個安全的選擇。

Homebrew 只會為您提供某些不需要 Linux 特定行為的程式的相容性。例如inotify僅在 Linux 上可用。drm(直接渲染管理器)僅在 Linux 上可用。還有一些其他相當低階的系統調用僅在Linux 上可用,並且OS X 上不存在等效的系統調用,因此如果不進行重大程式碼更改,將某些程式從Linux 移植到OS X 可能是不切實際或不可能的。

答案2

你可以使用Gentoo 前綴支援 OS X,你可以透過以下方式做到這一點引導它然後將前綴目錄中的相關路徑加入您的PATH。也許這已經為你做到了。完成此操作後,您可以使用標準 Gentoo 命令來安裝軟體套件。

emerge coreutils例如,將為您提供標準的 GNU utils。

請注意,Gentoo 預設編譯,您可能需要設定二進位主機反而。這只是使用該文章後半部分的 URL 之一,並將其放入PORTAGE_BINHOST="... your url here ..."./etc/make.conf的前綴中。

答案3

作為 @allquixotic 帖子的後續內容,以下是每個的官方說明brew install coreutils

所有指令均以前綴“g”安裝。

如果您確實需要使用這些指令及其正常名稱,可以從 bashrc 新增一個「gnubin」目錄到您的 PATH 中,例如

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

此外,您還可以使用正常名稱存取他們的手冊頁,即從 bashrc 到 MANPATH 的「gnuman」目錄

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

答案4

關於sed您可以從下載預編譯的二進位文件Rudix專案.更多Rudix套餐請參見這裡這裡

相關內容