2021年あけましておめでとうございます(´・ω・`)。 色々とゴタゴタしてるうちに2020年が終わってしまった…。 最近は時間が経つのが早い…。

そんな年末年始にdotfilesを色々といじってる際、再読込するとPATHが重複して登録される記述がところどころに散見される状態だった。 これを修正するのも面倒だし、どうしたもんかなと考えていたのだけど、bashrc/zshrcで読み込みんだ最後にPATHから重複した要素をすべて削除させることで対応することにした。

以下のような記述をbashrc/zshrcの末尾に記述すればいい。

export PATH=$(printf %s "$PATH" | awk -v RS=: -v ORS=: '!arr[$0]++')

[blacknon@thinkpad25][~/Work/202101/20210103]                                                                        2021-01-03 05:52:07 (日) JST
(`・ω・´) < echo $PATH | tr : \\n | sort
/bin
/home/blacknon/.cargo/bin
/home/blacknon/.cargo/bin
/home/blacknon/.gem/ruby/bin
/home/blacknon/.gem/ruby/bin
/home/blacknon/.local/bin
/home/blacknon/.local/bin
/home/blacknon/.nodebrew/current/bin
/home/blacknon/.nodebrew/current/bin
/home/blacknon/_go/bin
/home/blacknon/_go/bin
/home/blacknon/bin
/home/blacknon/bin
/home/blacknon/bin
/opt/android-sdk/platform-tools
/opt/android-sdk/tools
/opt/android-sdk/tools/bin
/usr/bin
/usr/bin/core_perl
/usr/bin/site_perl
/usr/bin/vendor_perl
/usr/lib/jvm/default/bin
/usr/local/bin
/usr/local/go/bin
/usr/local/go/bin
/usr/local/sbin

[blacknon@thinkpad25][~/Work/202101/20210103]                                                                        2021-01-03 05:52:09 (日) JST
(`・ω・´) < export PATH="$(printf %s "$PATH" | awk -v RS=: -v ORS=: '!arr[$0]++')"

[blacknon@thinkpad25][~/Work/202101/20210103]                                                                        2021-01-03 05:52:12 (日) JST
(`・ω・´) < echo $PATH | tr : \\n | sort
/bin
/home/blacknon/.cargo/bin
/home/blacknon/.gem/ruby/bin
/home/blacknon/.local/bin
/home/blacknon/.nodebrew/current/bin
/home/blacknon/_go/bin
/home/blacknon/bin
/opt/android-sdk/platform-tools
/opt/android-sdk/tools
/opt/android-sdk/tools/bin
/usr/bin
/usr/bin/core_perl
/usr/bin/site_perl
/usr/bin/vendor_perl
/usr/lib/jvm/default/bin
/usr/local/bin
/usr/local/go/bin
/usr/local/sbin

PATHの登録時に重複をあまり気にしたくないので、これ最後に書いてすべて解決!って感じにしといたほうが楽そう。


参考