BashやZshで設定ファイルである.bashrcや.zshrcをちょっと変更して
再び読み込む場合、
PATH
の値などは基本付け加えていく様な設定になってるため、
読み込む度に同じPATHが付け加えられていってやたら長いPATH
の値になったりしてしまいます。
そういったことを避けるために最初にちょっと付け加えておく設定について。
.bashrc/.zshrcでのPATH
などの設定
.bashrc/.zshrc の中で
export PATH=/home/USER/bin:$PATH
みたいな設定をして自分用のPATHを追加する事があると思います。
この設定のまま.bashrc/.zshrcを再び読み込むと
$ echo $PATH
/home/USER/bin:/home/USER/bin:...
みたいに同じPATHが重複してしまいます。
1つくらいなら何度か読み込み直してもさほど気にならないかもしれませんが、
いくつか加える様な設定をしていると一度source ~/.bashrc
とかするだけで
PATH
の値が無駄にものすごく長くなります。
実用上それほど困らないし、そもそも.bashrc/.zshrcを再読込することはそれ程ないので 気にしない人も多いかと思いますが、 ちょっと気になったのでこれを避ける様な設定を.bashrc/.zshrcに加えてみました。
_reset_path
.bashrc/.zshrcの一番最初に次の様な設定を書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
関数にせずにそのまま書いても良いですが、 他で使えることもあるかもしれないということで関数に。
普段使うものでもないので_
で始まる関数名にしています。
やっていることは初期値のPATH
の値をINIT_PATH
という値に保存しておく、ということ。
一番最初に.bashrc/.zshrcが読み込まれた時はINIT_PATH
の値は無いのでこの時の値をINIT_PATH
に保存します。
以降、.bashrc/.zshrcが読み込まれた時には
このINIT_PATH
の値に初期化して.bashrc/.zshrc
を読み始めます。
これで常に.bashrc/.zshrcを読む際にはPATH
は同じ初期値から始まるので
余計な重複を避けられます。
LD_LIBRARY_PATH
なども同様に重複を避ける設定として入れてあります。
PATHを追加する時のもチェックする
システムによって.bashrc/.zshrcを読み込む前に設定されているPATH
の値が違ったり、
また、.bashrcでは/etc/bashrcがあればそれを読み込む様にしていますが
その中でのPATH
の設定が違ったりします。
/usr/local/binなどのPATH
を一通り追加しておきたいのですが、
場合によってはそれらの値が既に入っている時もあります。
そういった時に重複を避けるために以下の様にチェックしながら追加することをしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
それぞれPATH
などに対して、/usr/bin
などがPATH
中にあるかどうかチェックして
なければ追加、ということをやっています。
("^$p/bin"
は先頭にある場合、":$p/bin"
は途中にある場合。)
後に追加するもののが優先度が高いので$HOME/usr/local/binがPATH
では一番優先度の高いものになります。
もしかすると/usr/local/binがなくて$HOME/usr/local/bin が初期値として入っているシステム、なんてのもあるかもしれません。 その場合にはちょっとこのやり方だと自分の思い通りの優先度にはならないので その場合はちょっと工夫しないといけませんが、 まあ基本的に上の順序を覆す様な初期設定があるシステムは今のところ見てません。
もし、作業中に新たにソフトをインストールする、という可能性がゼロであるならば、
1 2 3 4 5 6 7 8 |
|
みたいにして該当のディレクトリがある場合だけPATHを追加する、とすると
より無駄のないなPATH
にすることも出来ます。