最近、開発用にOSX10.7環境の構成を開始しました。 HomeBrewをインストールし、.bash_profile
に以下を追加しました。
export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"
echo $PATH
次の重複文字列を取得した場合を除いて、すべてが正常に機能しています。/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
読みやすくするために、これらはすべてパスです。
/usr/local/bin
/usr/local/sbin
~/bin:/usr/local/bin
/usr/local/sbin
~/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin
.bash_profile
の1行以外にパスに変更を加えたとは思いません。それらの重複をペアリングするための最良の方法は何ですか?パスを変更しているファイルを探し出し、それらを排除しようとする方法はありますか?
私のコメントをしたので、とにかく$PATH
を剪定するためのいくつかの提案があります。
パスを見ると、.bash_profile
が2回実行されているか、.bash_profile
で行われた変更が他の場所で複製されているようです。
'/ usr/local/git/bin'と 'use/local/bin' [sic]の7つの重複した追加があり、その後に '/ usr/local/git/bin'の5つのコピーが続きます。 git
のインストール方法によっては、git
でインストールされたファイルについてパッケージマネージャーに問い合わせることができる場合があります。 PATH
に影響を与えるいくつかの構成ファイルまたは変更されたシステムファイルが存在する可能性があります。
set -x
を.bash_login
の一番上に置き、新しいログインシェルを開始します。起動時にbash
が何をしているかを正確に示す多くの出力が得られるはずです。これは、PATH
がどこで変更されているかを把握するのに役立ちます。 set -x
を理解したり、あきらめたりしたら、削除できます。何も見つからない場合は、それを/etc/profile
の先頭に追加して、独自の.bash_profile
が処理される前にシステムが実行することを追跡することもできます。
コマンドラインから Ryan Thompsonのスクリプト を実行しました。
順序を変更せず、末尾に:
を残さずに、すべての重複を削除しました
PATH="$(Perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"
上記の便利な1ライナーに加えて、ライアンはconfig
で使用する(より構造化された)スクリプトを共有して、他の変数とPATH
を重複排除します。
これを$ HOME/.bashrcに追加して(必要に応じて、代わりに.bash_profileに追加することもできます)、$ PATHから重複するエントリを削除しました。私はLinuxでのみテストしましたが、Macでも動作するはずです。最初のエクスポートPATHの後に追加する必要があります。
export PATH=$(echo $PATH | awk -F: '
{ for (i = 1; i <= NF; i++) arr[$i]; }
END { for (i in arr) printf "%s:" , i; printf "\n"; } ')
git
をインストールすると、深刻な事前チェックなしで.bash_profile
が変更されました。このインストーラーはそれを破壊しました(明らかに12回)。 rash によって提案されたレシピを使用しますが、.bash_profile
に含める正しい最小パスを定義するには1回だけです。
.bashrc
でPATHを初期化する必要はありません。この初期化スクリプトは、シェルの各レベルで変更する必要がある構成用に予約されています。たとえば、プロンプト、位置、色などですが、PATHは変更しません。