
OS X のターミナルでデフォルトで使用できるコマンドは、Linux バージョンのように動作しないようです。これらすべてを実際の GNU Linux コマンドに置き換えるにはどうすればよいですか?
たとえば、sed -i には面倒な追加の "" 引数が必要です。また、テキスト ファイルでのみ機能します。これは役に立ちません。
答え1
一般的には、(またはすべきではない) は、デフォルトのコマンドをまったく置き換えません。その理由は、多くのシステム管理スクリプトやサードパーティのパッケージが、OS X ですぐに使用できるようにこれらのコマンドに依存している可能性が高いためです。
したがって、システム コマンドを消去して、互換性のない動作やコマンド ライン引数を持つ GNU の同等のコマンドに置き換えると、おそらく何かが壊れるでしょう。特に、もともと Linux または BSD で実行するように設計された後で Mac OS X に「移植」されたソフトウェアを使用する場合、これらの種類のプログラムは OS X API を呼び出すのではなく、シェル スクリプトとシステム コマンドに依存する可能性が高いためです。
あなたができるデフォルトを上書きせずに別のディレクトリにGNUユーティリティをインストールする環境をインストールし、PATH
環境変数を調整するこれにより、システム ディレクトリを検索する前に、GNU ディレクトリ内で見つかったコマンドが優先されます。対話型シェルを起動する場合にのみ PATH がこのように設定されるように設定できます。これを行う方法bash
については、Google で検索するか、SU で別の質問をしてください (または、おそらく以前に質問されているので、検索してください)。
そのような環境の例としては自家製例えば、GNUsed
などが含まれています。Homebrewをインストールしたら、次のように入力します。
brew install coreutils
そしてインストールするGNU コアユーティリティsed
これらは、、、、およびGNU/Linux に同梱されているが OS X には同梱されていない他の多くのツールを提供します。ただし、デフォルトの OS X バイナリを「上書き」しないように、デフォルトでは がプレフィックスとして付けられますdate
。したがって、Coreutils をインストールした後、GNU sed を使用する場合は、次のように入力します。printf
wc
g
gsed
これを毎回入力するのが面倒な場合は、PATH に「gnubin」ディレクトリを追加し、 で GNU sed を呼び出すだけですsed
。 に以下を追加する必要があります~/.bash_profile
。
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
もちろん、Linux環境を最初から最後まで(カーネル、X11、システムコールの互換性など)必要とする場合は、次のような仮想マシンでLinuxを実行する必要があります。バーチャルボックスLinux 上で実行するように設計されたソフトウェアまたはスクリプトを実行する必要がある場合、これは安全な選択です。
Homebrew では、Linux 固有の動作を必要としない特定のクラスのプログラムに対してのみ互換性が提供されます。たとえば、はinotify
Linux でのみ利用可能です。drm
(Direct Rendering Manager) は Linux でのみ利用可能です。Linux でのみ利用可能で、OS X には同等のものがない、比較的低レベルのシステム コールが他にもいくつかあります。そのため、大幅なコード変更を行わない限り、特定のプログラムを Linux から OS X に移植することは非現実的または不可能です。
答え2
あなたはGentoo プレフィックスOS Xをサポートする場合は、ブートストラップそして、プレフィックス ディレクトリ内の関連パスを PATH に追加します。これで既に実行されている可能性があります。実行後は、標準の Gentoo コマンドを使用してパッケージをインストールできます。
emerge coreutils
たとえば、標準の GNU ユーティリティが取得されます。
Gentooはデフォルトでコンパイルされるので、バイナリホストを設定する代わりに、その記事の後半にある URL の 1 つを使用して、それをプレフィックスにPORTAGE_BINHOST="... your url here ..."
配置するだけです。./etc/make.conf
答え3
@allquixoticの投稿に続いて、公式の手順は次のとおりです。brew install coreutils
すべてのコマンドはプレフィックス「g」付きでインストールされています。
これらのコマンドを通常の名前で使用する必要がある場合は、次のようにbashrcからPATHに「gnubin」ディレクトリを追加できます。
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
さらに、bashrcからMANPATHに「gnuman」ディレクトリを追加して、通常の名前でマニュアルページにアクセスすることもできます。
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"