47
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Mac】重複したPATHを削除する【zsh】

Last updated at Posted at 2020-07-12

zshrcでPATHを通したい

仕事用のメインPCをWindowsからMacに切り替えた。
どうやらMacではプログラムを走らせようとすると何かとPATHを通すように要求されるらしい。
PATHを通すことでどのディレクトリでもそのプログラムをランできるようになる。

bashとzsh

プログラムを動かすターミナルにはシェルと呼ばれるものがあって、これがMacOSのバージョンによって異なることがわかった。
シェルの種類によって、そもそものPATHの通し方の設定自体も変わってくる。
MacOSのシェルにはbashとzshの2種類があり、自分のシェルはzshだった。
確認するためのコマンドは

echo $SHELL

bashの場合はbash_profileファイル、zshの場合はzshrcファイルを編集する。

zshでPATHを通す

GoogleでPATHの通し方を調べると、

  1. プログラムのインストール

  2. /usr/localとかに移す

  3. ~/binにPATHを通す

3-1. ホームディレクトリにある.zshrcファイルをテキストエディットで開く。

open ~/.zshrc

3-2. 以下の文をPATHを通すディレクトリに合わせて編集して.zsfrcに書き込む。/usr/local/binにPATHを通すなら…

export PATH="$PATH:/usr/local/bin"

3-3. .zshrcファイルの変更を適用する。

source ~/.zshrc

3-4. PATHが通っているか確認する

echo $PATH | tr ':' '\n'

で、できるらしい。

同じPATHを2つ通してしまう…

上記の方法でやると、PATHが上書きされるのではなく、追加されてしまう。つまり、PATHを書き込むごとにどんどんPATHが増えていってしまう。そもそも、.zshrcには追加したいPATHのみを書き込み、次回新たにPATHを追加するときは.zshrcの内容を全てクリアしてから使うものである。だが、PATHの全容をテキストとして見られるように.zshrcには全てのPATHを保存しておきたい。

zshでの解決法がわからん

解決法を探したが、bashでの解決方法はあるものの、zshについての日本語のページが見つからない。Googleでいろいろ調べていると、海外の質問サイトに答えが載っていた。

zshrcで重複したPATHを削除する

やることはひとつ、

typeset -U PATH

これだけ。
PATH、であって、pathでもPathでもないことに注意。

終わったら、

echo $PATH | tr ':' '\n'

で確認。
以上。

確かに重複したPATHがきれいになくなっていた。

ここで一手間

この処理を毎度のPATHを通す度にタイプするのは面倒なので、これを.zshrcファイルに組み込んで.zshrcファイルの更新を適用するごとに重複を削除する様にする。
.zshrcファイルで

export PATH=...
export PATH=...

と並んでいる文字列の最後の行に先程の

typeset -U PATH

を追加すればOK。
これで毎回3-3にある処理をするごとに重複したPATHが削除される様になる。

参考ページ

47
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?