最近自宅のUbuntuのログインシェルを試験的にfishにしています。
「fish_user_paths は環境変数 PATH に優先的に加えられるディレクトリの配列変数」1ですが、fishの設定ファイルであるconfig.fishが読み込まれるたびにfish_user_paths
に同じパスが何度も書かれてしまうので対策しました。
同じパスが増える理由
set -U fish_user_paths /home/user_name/.pyenv $fish_user_paths
set -U fish_user_paths /home/user_name/.go $fish_user_paths
既存の$fish_user_paths
に追加していくように書いているので何度も呼び出すと同じパスが追加されていってしまいます。
対策
set -U fish_user_paths (echo $fish_user_paths | tr ' ' '\n' | sort -u)
このコードをconfig.fishの最後の方に書いています。やっていることはただsort
とuniq
のようなことをやっているだけです。
余談
ちなみにbashなどの場合のワンライナーを書いている方がいました。2
export PATH=`echo $PATH | tr ':' '\n' | sort -u | paste -d: -s -`;
fishで同じ考え方でやろうと思ったのですがうまくいきませんでした。
set -U fish_user_paths (echo $fish_user_paths | tr ' ' '\n' | sort -u | paste -d' ' -s)
確かに$fish_user_paths
をecho
してみると/home/user_name/.go/bin /home/user_name/.pyenv/bin
となっているのですが、これは/home/user_name/.go/bin
と/home/user_name/.pyenv/bin
という2つのパスがあるのではなく"/home/user_name/.go/bin /home/user_name/.pyenv/bin"
というパスが指定されてしまっているようでした。
つまりスペース区切りの文字列ではなくリストで定義しろということですね。
-
http://fish.rubikitch.com/document-ja/ (2017年8月6日 閲覧) ↩
-
http://d.hatena.ne.jp/lurker/20060428/1146227406 (2017年8月6日 閲覧) ↩