FreeBSDでGNU grepをデフォルトにする方法は?

FreeBSDでGNU grepをデフォルトにする方法は?

私はFreeBSD 9.1-RELEASEを実行しています。 GNU grepとportmaster textproc/gnugrep

しかし、ユーザーの「デフォルト」grepはまだFreeBSD grepです。

# /usr/local/bin/grep -V
/usr/local/bin/grep (GNU grep) 2.12

# grep -V
grep (GNU grep) 2.5.1-FreeBSD

GNU grepをデフォルトにしたいです。私の環境変数PATHで指定されたディレクトリの順序に問題があることを知っています。

# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin

しかし、/usr/local/binアイテムを私PATH

DebianなどのLinuxディストリビューションでは、これらの操作は通常、およびdpkg-divert/またはを使用して行われますupdate-alternatives

システムのアップグレードなどを中断せずにFreeBSDで目的のタスクを実行する最良の方法は何ですか?

答え1

修正する:この回答は2013年の回答であり、FreeBSD 8.x以前に適用されます。 ㅏBSD grepに追加される改訂 222273FreeBSD-9.0に表示されます(奇妙なことに、一般的に包括的なリリースノートには変更がありません:Google検索)。すべての機能を備えたGNU grepはまだ有効です。ポートコレクションにあります。


FreeBSDgrep はい 以前はGNU grep、非常に古い、いくつかのパッチが適用されたが:

# which grep 
/usr/bin/grep

# /usr/bin/grep -V
grep (GNU grep) 2.5.1-FreeBSD

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

これにはいくつかのパッチ(主にFedora Linuxで提供)があります。すでに/usr/src/そのパッチがインストールされている場合を参照してください/usr/src/gnu/usr.bin/grep/FREEBSD-upgrade

ポートバージョン(2.12対2.5.1)で特定の項目が必要な場合は、多くのバグ修正、速度改善、およびPCREサポート(システムバージョンではアクティブではありません)があるため、再注文するのは-P非常に安全ですPATH/usr/local/bin私は通常何をする。 (FreeBSDではデフォルトは明示的ですが、最善の方法はsu -ルート環境を正しく設定することです。)~root/.cshrcPATH

それ以外の場合は、シェルのマニュアルページを確認し、必要に応じて設定してくださいalias。ただし、これは実際に対話型の使用にのみ当てはまり、シェルスクリプトやMakefileでは観察されません。

答え2

エイリアスを作成してbashに追加します~/.bash_profile

alias grep /usr/local/bin/grep

(他のシェルも同様のことができると確信しています。)これにより、個々の実行可能ファイルを選択できます。gnugrepシステムエイリアスを失わないように、エイリアスを呼び出すこともできます。

答え3

パスの先頭までのみgrepします。

  • ディレクトリを作成しますmkdir /override/bin
  • このディレクトリにシンボリックリンクを配置するln -s /usr/local/bin/grep /override/bin/か、gnu lnがある場合は、これをお勧めしますln -s -t /override/bin/ /usr/local/bin/grep(誤ったトレースを減らす)。
  • /override/bin/パスの先頭に追加します。

答え4

${PATH} を変更したくない場合は、grep前に入力した ${PATH} 値から目的のパスにリンクすることもできます。

たとえば、/bin$ {PATH}の2番目のエントリは、すべてのユーザーの$ {PATH}値に存在する可能性があります。

したがって、rootとして次のことができます。

cd /bin
ln -s /usr/local/bin/grep

関連情報