私は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/.cshrc
PATH
それ以外の場合は、シェルのマニュアルページを確認し、必要に応じて設定してください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