OS XのシェルコマンドをLinuxバージョンに置き換えますか?


32

OS Xのターミナルでデフォルトで使用可能なコマンドは、Linuxバージョンのようには動作しないようです。それらをすべて実際のGNU linuxコマンドに置き換えるにはどうすればよいですか?

たとえば、sed -iには厄介な追加の ""引数が必要です。また、テキストファイルでのみ機能します。これは無意味です。


1
Umm ... sedは「テキストエディタ」であり、バイナリファイルを変更することもできます。他に何をしたいですか?必要なものを正確に説明してください。私はあなたの問題を理解できません。もう少し例を挙げてもらえますか?
テルドン

3
実際、sedはストリームエディターです。つまらないものではありませんが、実際には、ファイルがストリームでない限り、ファイルを変更することを意図したものではありません。それがまさに-iフラグが非標準である理由です。edファイルの編集用です。
小次郎

回答:


43

一般的な場合、デフォルトのコマンドを置き換えることはできません(またはすべきではありません)。その理由は、多くのシステム管理スクリプトとサードパーティのパッケージが、おそらくこれらのコマンドに依存して、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をインストールします。これらはを提供しますseddateprintfwcおよび「オーバーライド」のデフォルト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に移植することは、大幅なコード変更なしでは非現実的または不可能です。


Boot Campが常にあります。:)
小次郎

13
何らかの理由でbrew install coreutilsが含まれていませんsedbrew install gnu-sedただし、.exe を更新しても、このインストールgsedを行うことはできますが、できません。Macを隠すためのシンボリックリンクを作成しました:ただし、正しいマンページを表示するには、まだ行う必要があります。sed$PATHsedln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sedman gsed
dimo414

6
brew install gnu-sed --default-namesとしてインストールされますsed
ivotron

1
の代わりに--default-names、g-prefixedコマンドを使用してインストールしてから、oh-my-zsh(強く推奨)をインストールし、プラグインgnu-utilsを有効にすることができます。
ビブスタ14

3

OS XをサポートするGentooプレフィックスを使用できます。これをブートストラップし、プレフィックスディレクトリ内の関連するパスをPATHに追加することにより、これを行うことができます。これは既にあなたのためにそれをしているかもしれません。それが終わったら、パッケージをインストールするために標準のGentooコマンドを使用できます。

emerge coreutils たとえば、標準のGNUユーティリティを取得します。

Gentooはデフォルトでコンパイルされることに注意してください、代わりにバイナリホストセットアップしたいかもしれません。これはちょうどその記事の後半でのURLのいずれかを使用して、そしてそれを置くことであるPORTAGE_BINHOST="... your url here ..."./etc/make.confあなたの接頭辞で。


1

@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"

0

に関してsedは、Rudixプロジェクトからプリコンパイル済みバイナリをダウンロードできます。その他のRudixパッケージについては、こちらこちらをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.