
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,請鍵入printf
wc
g
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
答案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"