[小ネタ] fishの重複パスを削除する

  • 4
    いいね
  • 0
    コメント

最近自宅の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の最後の方に書いています。やっていることはただsortuniqのようなことをやっているだけです。

余談

ちなみに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_pathsechoしてみると/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"というパスが指定されてしまっているようでした。

つまりスペース区切りの文字列ではなくリストで定義しろということですね。