【ネタ記事】PATHの沼にハマりました…。

プログラミング

突然ですが、プログラミング学習者の皆さんは、こんなメッセージを見たことあると思います。

zsh: command not found: $

PATHが通っていないときのエラーメッセージです。

私は、そんなPATHを通そうと、色々やらかしてしまった一人です。

PATHが通らず、勝手に悩み、勝手に解決したネタ話をしたいと思います。

$PATHとは

まず、私のPATHについての小咄をする前に、しっかりとPATHについて知識を身に付けておきましょう。

参考となる記事リンクを載せておきます。

PATHを通すとは? (Mac OS X)

PATHを通すとは? (Mac OS X) - Qiita
PATHの通し方が記されている記事はよく見かけますが 「そもそもPATHを通すってどういうこと?」状態だったのでそれに関しての備忘録です。 PATHを通すとは? コマンド検索パス(コマンドサーチパス)を追加すること。 ※色々な言...

PATHを通すために環境変数の設定を理解する (Mac OS X)

PATHを通すために環境変数の設定を理解する (Mac OS X) - Qiita
前回の投稿 PATHを通すとは? (Mac OS X) PATHを通すには特定のファイルにexport PATH=$PATH:追加したいコマンド検索パスのような記述を追加するみたいですが、記述内容が理解できず「exportって...

Pathを通すとは、環境変数とは

Pathを通すとは、環境変数とは - Qiita
Pathを通すとか、環境変数を設定するとか、 なんとなくでしか理解してなかったのですが、明確に理解すると、 コマンドを円滑に使えることのありがたみを感じるようになったので、まとめてみました。 実行環境 OS: MacOS v1...

【完全解説】Macで「PATHを通す」をちゃんと理解する【初学者必読】

【完全解説】Macで「PATHを通す」をちゃんと理解する【初学者必読】

PATHの確認

話は戻りまして、PATHが通らず、エラー画面が出てしまいました

まずは、PATHどうなってんだよ!と確認します。

# PATHの確認
xxxxxxxxx@xxxxxtaitonoAir ~ % echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

すると、ブワッと出てくるんですね。

その時の感想が、こちらです。

もふぃ
もふぃ

うわぁ、usr, binとかいっぱいあるじゃん…

キレイにしたいなー

この時は、そんなふうに思っていました。

.bash_profileの編集

整理する方法について、下記ブログを発見。

MacのPATHの削除方法を紹介!増えすぎたPATHを整理しよう

MacのPATHの削除方法を紹介!増えすぎたPATHを整理しよう | Aprico
Macではファイルやフォルダの情報としてPATHの情報を設定できますが、このPATHの情報を整理しないと増えすぎて困る場合があります。今回はMacのPATHの削除の方法と増えすぎたPATHを整理する方法について紹介していきます。
もふぃ
もふぃ

ホゥホゥ、.bash_profileの編集をすればいいのかな…?

#.bash_profileのオープン

open ~/.bash_profile

すると、こんな画面が…

もふぃ
もふぃ

なんだよ、無茶苦茶被ってるじゃん…。ダブりは削除しても、問題ないだろ。

# 編集後の.bash_profileを更新
source ~/.bash_profile

結果。。。

xxxxxxxxx@xxxxxtaitonoAir ~ % echo $PATH                               
HOME/.rbenv/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
もふぃ
もふぃ

なんで増えたwww

めっちゃ長くなってるしww

PATHの見方

まず、最初にめっちゃ長いと思っていたPATHは、実はそんなに長くなかったことが判明。

もう一度最初のコードを振り返ってみましょう。

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

# セミコロン:で区切ってある
# 実際は…

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin

# 6つのPATHしかなかった。

このように、細切れになっているだけで、何ひとつダブっているものはありませんでした。

もふぃ
もふぃ

なんだ、最初に戻せばいいんじゃん。

.bash_profileを元に戻す

じゃあ、もう一度.bash_profile開いて、元に戻そう。

xxxxxxxxx@xxxxxtaitonoAir ~ % open .bash_profile

# .bash_profileを元に戻す

xxxxxxxxx@xxxxxtaitonoAir ~ % source ~/.bash_profile
xxxxxxxxx@xxxxxtaitonoAir ~ % echo $PATH            
/Users/xxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxx/.rbenv/bin:/Users/xxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxx/.rbenv/bin:/Users/xxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxx/.rbenv/bin:HOME/.rbenv/bin:HOME/.rbenv/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
もふぃ
もふぃ

ちょwwwww

めっちゃ増えてるやんけwww

PATHの再設定

こうなったら、PATHを再設定じゃー!

# PATHを再設定
xxxxxxxxxxx@xxxxxtaitonoAir ~ % export PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

# PATHの確認
xxxxxxxxxxx@xxxxxtaitonoAir ~ % echo $PATH
/Users/xxxxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxxxx/.rbenv/bin:/Users/xxxxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxxxx/.rbenv/bin:/Users/xxxxxxxxxxx/.rbenv/shims:/Users/xxxxxxxxxxx/.rbenv/bin:HOME/.rbenv/bin:HOME/.rbenv/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
もふぃ
もふぃ

ちょ…

またPATH増えた…。

中身はどうなってるのか、みてやろうじゃないか。

パスのひとつ一つの中身になんの環境変数が入っているのか、確認してみました。

# ひとつひとつ ls パス でパスの中身を確認。

# 例)
$ ls /bin
[		   dd		      launchctl	  pwd		   test
bash	 df		      link		    rm		   unlink
cat		 echo		    ln		      rmdir		 wait4path
chmod	 ed		      ls		      sh		   zsh
cp		 expr		    mkdir		    sleep
csh		 hostname 	mv		      stty
dash	 kill		    pax		      sync
date	 ksh		    ps		      tcsh

# /bin の中にはecho, mkdir, rmなどが入っているんだなー。

ひとつ、ひとつ、PATHの中身を検索した結果、下記の結果になりました。

/Users/xxxxxxxxxxx/.rbenv/shims
:/Users/xxxxxxxxxxx/.rbenv/bin ... no such file or directory
:/Users/xxxxxxxxxxx/.rbenv/shims
:/Users/xxxxxxxxxxx/.rbenv/bin
:/Users/xxxxxxxxxxx/shims
:/Users/xxxxxxxxxxx/.rbenv/bin
:HOME/.rbenv/bin
:HOME/.rbenv/bin ...no such file or directory
:/bin
:/usr/local/bin
:/usr/local/bin
:/usr/bin
:/bin
:/usr/sbin
:/sbin
:/opt/X11/bin
:/usr/local/bin
:/usr/bin
:/bin
:/usr/sbin
:/sbin
:/opt/X11/bin ...permission denied
もふぃ
もふぃ

重複しているし、削除したいなぁ。。。

やっちゃダメ!? unset PATH

いっそ全削除して、最初から入れ直した方が楽なのかなーと思いました。

# 全削除コマンド らしい…。
$unset PATH
もふぃ
もふぃ

けど、このコマンドは使用しないでください!

とってもヤバそうです!!

使用したからと言って、責任は持ちませんよ!

解決策

もふぃ
もふぃ

キーーーーーーッ!

もう何したらいいか、わからーーーーん!!

ターミナル終了

ターミナル 再起動

xxxxxxxxx@xxxxxtaitonoAir ~ % echo $PATH                        
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
xxxxxxxxx@xxxxxtaitonoAir ~ % 
もふぃ
もふぃ

あれ?直ったよ…。

結論

気にすんな!ターミナル落とせば直る!

以上!!

その他参考記事

初心者向け:command not foundを解決する方法 - Qiita
概要 プログラミングの学習を始めた頃、Ruby on Railsの環境構築において、command not found にたびたび遭遇しました。 色々な記事を参考にして、その通りにやってみるのですが、なかなか解決できません。 ...
macOS で PATH の整理を実施する - Qiita
いろいろとやっていくうちに$PATHが汚れてきたので整理したい brewなどで乱暴に追加した結果.zshrcのexportしているPATHが乱雑になってきたので、 よしなに整理したい。 環境: Mac + Zsh 自分の利...
Bash や Zsh で PATH に同じパスが何度も追加されないようにする - Qiita
GNU Screen を主に使っていますが、ふと気づくと PATH 環境変数の中身がかなり重複してカオスになっていたので、整理しました。 環境は MacOSX と CentOS 6.x です。 また、その後 tmux でも試してみ...
macで付け加えすぎたPATHを消したいです|teratail
anacondaのPATHや重複してしまっている/usr/local/binのPATHを削除して.bash_profileの中身や$PATHを整理したいです。PATHやターミナルのシステムを理解しないまま色々とコマンドを入力してしまいました。この解決方法を教えていただけたら幸いです macOS&n

コメント