Mac OS XユーティリティをGNUコアユーティリティに置き換える方法


181

Mac OSXとLinuxで使用したユーティリティコマンドにはいくつかの違いがあることがわかりました。私の経験を統一したいです。

すべてのmacユーティリティをGNUユーティリティに置き換えるにはどうすればよいですか?


2
apple.stackexchange.com/questions/71119/…も参照してください。
lhf

2
ここにガイドがありますtopbug.ne​​t/blog/2013/04/14/…–
デニス

16
私はあなたの不満に同情しますが、長期的には、彼らが置き換えられた場合、それはより大きな不満を引き起こすだろうと信じています-同じことを追求した後、私はhomebrew以下で述べたように使用することをお勧めしますggsedgreadlinkなど)の代わりにシステムユーティリティを交換します。
cwd

grepのは、以下を参照してくださいapple.stackexchange.com/questions/193288/...
ダンPritts

3
@cwdには同意しません。使用--with-default-namesはローカルユーザーにのみ影響します。Mac向けの端末ユーティリティでは問題になる可能性がありますが、すべてにhomebrewを使用する場合は、Linuxを使用しているふりをすることもできます。iterm2と混合して、私にとってはうまく機能しています。基本的には、Linuxボックスで家にいるふりをすることができます。
レイ・フォス

回答:


210

これにより、gプレフィックスが付いたGNUユーティリティのシンボリックリンクが追加されます/usr/local/bin/

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep

brew search gnu他のパッケージを参照してください。ag接頭辞なしでコマンドを使用したい場合は、たとえば/usr/local/opt/coreutils/libexec/gnubin、他のディレクトリの前に追加しますPATH

$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.

If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:

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

Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:

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

6
FWIW、私はこれらすべての偉大なGNU utilsパッケージのためのメタパッケージとして動作する自作式を有する:見shiny-and-gnu.rbgithub.com/al-the-x/homebrew-mine
ALをX

1
最初のPATHは機能しますが、MANPATHが失敗しました、なぜですか?OSX10.10を使用しているからですか?$ MANPATHをエコーし​​ましたが/usr/local/opt/coreutils/libexec/gnuman:、元のMANPATHには含まれていなかったようです。bashrcでMANPATH confをコメントアウトした後、何も得られませんでしたecoh $MANPATH。そしてもちろん、私がを使用する場合man pwd、BSDマニュアルを入手しました。これを修正する方法は?

2
については、インストールコンソールの出力に記載されていないものfindutilsを追加する必要がありPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"ます。
シュリダールSarnobat

1
さらに、の適切なmanページを取得するにはfindutils、これを追加してください$MANPATH /usr/local/opt/findutils/share/man
クリスチャンロング

1
@Zen:MANPATHデフォルトのシステム値を維持するために開始する正しい方法は次のとおりMANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"です。キーは構成体にあり${var-default_value}ます。
ダン

50

加えてbrew install coreutils、あなたはまた、のようないくつかの他のパッケージをインストールする必要がありgnu-sedgrep

brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk

この--with-default-namesオプションは2019年1月から削除されているため、gプレフィックスなしで使用する場合は、各バイナリをパスに追加する必要があります。

古いリファレンス(--with-default-names利用可能になったとき):http : //www.topbug.ne​​t/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/


brew install gawk(他のすべてとは異なり)awk(シンボリックリンクを介して)置き換えられることに注意してください/usr/local/bin/awk。オリジナルを保持したい場合は/usr/bin/awk、ちょうどrm /usr/local/bin/awk
ウィスバッキー

17

交換することをお勧めするかどうかはわかりません。ただし、それらを別のパスにインストールし、その方法で使用することができます。全体として、あなたがLinuxから来て、より多くの「汎用」* nixユーティリティ、およびaptに似たシステムにアクセスしたいなら、Macportsを調べることをお勧めします:http : //www.macports.org

たとえば、Appleに付属のGCCとは対照的に/追加として、最新の「汎用」GCCを使用できます。これは単なる例です。


3
たとえば、Mac OS Xのtarおよびzipは、GNUバージョンにはないメタデータについて知っています。
lhf

1
Appleが提供するアプリがあります。これは一部のコマンドラインツールのGUIであり、それらを置き換えるとアプリが奇妙な動作を開始する可能性があるため、置き換えずに追加してください。
ⱮarkƬ

右; Macportsのようなものがそれらを追加しますが、それらは置き換えられません。
ジョナサン

MacPortsでデフォルトでGNUユーティリティを使用する場合/opt/local/libexec/gnubinは、PATH環境変数の前に追加できます。
マークシェップ

8

これを正確に行うスクリプトを作成しました!スクリプトはここ(または下)で見ることができます。ただし、この投稿が以前にリンクされたスクリプトの最新バージョンを反映することを常に保証することはできません。

スクリプトを実行すると、Homebrewがインストールされ(まだインストールされていない場合)、関連するすべてのGNUユーティリティがインストールされ(まだインストールされていない場合)、PATHインストールされたユーティリティから変数が構築されます。

#!/bin/bash

# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
  gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
  m4 make nano file-formula git less openssh python rsync svn unzip vim \
  --default-names --with-default-names --with-gettext --override-system-vi \
  --override-system-vim --custom-system-icons

# Empty the .bash_path file that holds GNU paths
> ~/.bash_path

# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done

# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
  # Add Ubuntu-style PS1 to .bash_profile
  cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
  # Add .bash_path to .bash_profile
  echo "source ~/.bash_path" >> ~/.bash_profile
fi

1
あなたは批判的なコメントなしでただ投票を愛していませんか?スクリプトをありがとう。
ジャスティンフォース

@JustinForce問題ありません!フィードバックありがとうございます。
クレイフリーマン

2
-1。このスクリプトはあまりにも多くの魔法をします。.bash_path@ user495470と@xuhdevの回答に従う場合、-manglingのすべては本当に必要ありません。PS1の変更は、この質問の範囲外です。
グレッグドゥビッキ

1
残念ながら@GregDubickiは、これらのパッケージの一部にbangパス「マングリング」が必要です。これを自分で確認できます。PS1の変更に関しては、このスクリプトは個人用です。それを元に戻したい人は誰でも非常に簡単にそうすることができます。
クレイフリーマン

5

私はmacOS CLIを透過的に新しいGNU / Linux CLIエクスペリエンスに変換するスクリプトを作成しました。

  • 不足しているGNUプログラムのインストール
  • 古いGNUプログラムの更新
  • プリインストールされたBSDプログラムを好みのGNU実装で置き換える
  • 人気のあるGNU / Linuxディストリビューションに共通する他のプログラムをインストールする

https://github.com/fabiomaia/linuxify

git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install

また、すべてを簡単に元に戻すことができます。

./linuxify uninstall

1
最初のコマンド(git clone git@github.com.:fabiomaia/linuxify.git)を実行しようとすると、最初に「ホスト 'github.com'の信頼性を確立できないなど」と言われました。入力yesしてEnterキーを押しました。それからそれはgit@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.何が間違っていると言いましたか?
izogfif

@izogfif代わりにHTTPSを使用してクローンを作成してくださいgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia

1
はい、うまくいきました。回答を更新してください(また、開始時にそれらのドルを削除してください-テキストを選択してコピーしてコンソールに貼り付けるとコピーされます)。
izogfif

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