OS Xのターミナルでデフォルトで使用可能なコマンドは、Linuxバージョンのようには動作しないようです。それらをすべて実際のGNU linuxコマンドに置き換えるにはどうすればよいですか?
たとえば、sed -iには厄介な追加の ""引数が必要です。また、テキストファイルでのみ機能します。これは無意味です。
OS Xのターミナルでデフォルトで使用可能なコマンドは、Linuxバージョンのようには動作しないようです。それらをすべて実際のGNU linuxコマンドに置き換えるにはどうすればよいですか?
たとえば、sed -iには厄介な追加の ""引数が必要です。また、テキストファイルでのみ機能します。これは無意味です。
回答:
一般的な場合、デフォルトのコマンドを置き換えることはできません(またはすべきではありません)。その理由は、多くのシステム管理スクリプトとサードパーティのパッケージが、おそらくこれらのコマンドに依存して、OS Xですぐに使用できる方法で動作するためです。
したがって、単にシステムコマンドを消去し、互換性のない動作やコマンドライン引数を持つGNUの同等のものに置き換えると、おそらく何かが壊れてしまいます。特に、元々LinuxまたはBSDで実行するように設計された後にMac OS Xに「移植」されたソフトウェアを使用する場合、これらのタイプのプログラムはOS X APIを呼び出すのではなくシェルスクリプトとシステムコマンドに依存する可能性が高いためです。
あなたができることは、デフォルトを上書きせずにGNUユーティリティを別のディレクトリにインストールする環境をインストールしてから、システムディレクトリを検索する前にGNUディレクトリ内で見つかったコマンドを優先するように環境変数を調整するPATH
ことです。これを配線して、対話型シェルを起動している場合にのみPATHを設定するようにすることができます。これを行う方法をグーグルでbash
検索したり、SUで別の質問をしたり(または、以前に質問された可能性があるため検索したり)したい場合は、
そのような環境の例は、たとえばGNUを含むHomebrewsed
です。Homebrewをインストールしたら、次のように入力できます
brew install coreutils
GNU Coreutilsをインストールします。これらはを提供しますsed
、date
、printf
、wc
および「オーバーライド」のデフォルトOS XのバイナリにGNU / Linuxでの船ではなく、OS X.しかしが、ように、彼らは接頭辞されていないことを他の多くのツールがg
デフォルトで。したがって、Coreutilsをインストールした後、GNU sedを使用する場合は、次のように入力します。
gsed
毎回入力するのが面倒な場合は、「gnubin」ディレクトリをPATHに追加して、でGNU sedを呼び出すことができますsed
。以下を以下に追加する必要があります~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
もちろん、スープからナッツ(カーネル、X11、syscallの互換性など)までのLinux環境が必要な場合は、VirtualBoxなどの仮想マシンでLinuxを実行する必要があります。Linuxで実行するように設計されたソフトウェアまたはスクリプトを実行する必要がある場合、これは安全な方法です。
Homebrewは、Linux固有の動作を必要としないプログラムの特定のクラスとの互換性のみを提供します。たとえばinotify
、Linuxでのみ使用可能です。drm
(Direct Rendering Manager)はLinuxでのみ利用可能です。Linuxでのみ利用可能な低レベルのシステムコールがいくつかあり、OS Xには同等のものが存在しないため、特定のプログラムをLinuxからOS Xに移植することは、大幅なコード変更なしでは非現実的または不可能です。
brew install coreutils
が含まれていませんsed
。brew install gnu-sed
ただし、.exe を更新しても、このインストールgsed
を行うことはできますが、できません。Macを隠すためのシンボリックリンクを作成しました:ただし、正しいマンページを表示するには、まだ行う必要があります。sed
$PATH
sed
ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
man gsed
brew install gnu-sed --default-names
としてインストールされますsed
--default-names
、g-prefixedコマンドを使用してインストールしてから、oh-my-zsh(強く推奨)をインストールし、プラグインgnu-utilsを有効にすることができます。
OS XをサポートするGentooプレフィックスを使用できます。これをブートストラップし、プレフィックスディレクトリ内の関連するパスをPATHに追加することにより、これを行うことができます。これは既にあなたのためにそれをしているかもしれません。それが終わったら、パッケージをインストールするために標準のGentooコマンドを使用できます。
emerge coreutils
たとえば、標準のGNUユーティリティを取得します。
Gentooはデフォルトでコンパイルされることに注意してください、代わりにバイナリホストをセットアップしたいかもしれません。これはちょうどその記事の後半でのURLのいずれかを使用して、そしてそれを置くことであるPORTAGE_BINHOST="... your url here ..."
に./etc/make.conf
あなたの接頭辞で。
@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"