tmux利用時にPATHが重複する問題

普段ターミナルエミュレータを利用する際は必ずと言っていいほどtmuxを使っている。
複数のシェルを横に並べたりタブに分けられる上にショートカットで自在にカーソル移動が出来て便利。

そんな便利なtmuxだが、利用時に環境変数PATHの値が一部重複していることに気がついた。
tmuxを利用し始めて数年経つのに何故今更。

tmuxを利用する時の手順は以下のようなフローになる。

1.ターミナルエミュレータを起動(zshが起動し、.zshrcを読み込む)
2.tmuxを起動(再びzshが起動し、.zshrcを読み込む)

.zshrcが2回読み込まれていることが分かる。
.zshrcの記述を見てみると自分の場合はPATHの設定に以下のような記述をしていた。

PATH=(任意のディレクトリ)/bin:PATH

既存のパスの先頭に追加したいディレクトリのパスを結合する形。
ここまで書けば問題の原因は明白で、
2度の.zshrcの読み込みによって同じティレクトリへのパス追加が2度起こっていることである。

解決方法としては以下の様にすれば良い。

if [[ -z $TMUX ]]; then
    PATH=(任意のディレクトリ)/bin:PATH
fi

環境変数TMUXでtmuxの利用の有無を判定し、利用している場合はパスの結合を行わない。
これで2度目のパスの結合は行われずに済む。

最近、ブログが停滞気味なのでザッと書いた。

追記

調べたところ

typeset -U PATH

上記の様にするだけで重複したPATHを自動的に絞り込むように環境変数の動作が変わるらしい。
こっちの方が合理的。
if文判定を用いた場合は、仮にPATHをzshrcファイルの複数の場所で結合している場合に、
その数だけif文を書かなくてはいけないので不便。