LoginSignup
0
2

More than 1 year has passed since last update.

パスを通す?環境変数とは…??command not findに打ち勝ちたくて調べたこと

Last updated at Posted at 2021-09-08

入れたはずのPythonがcommand not findと出力されて使えない…
入っているはずなのにnvmコマンドを打ってもcommand not findと出力されて使えない…

などなど、入れたはずのツール、言語がチュートリアル通りにターミナルへ入力してもcommand not findと出力される問題。

こんなことがあった時に偉い人からよくいただくアドバイスが「どうせパスが通ってないんでしょ?」
いやいや、パスってなんじゃい!と思って重い腰を上げて調べました。

ちなみに私は使っているmacOSが古く、bashを使ってます。
新しいmacOS(確かCatalina以降?)の人はzshなので、編集するファイルが違ったり、ちょこっと違うみたい(使った事ないからわからない)のでご了承ください。

パスを通すとはコマンドを探す先を教えてあげること

インストールしたツールや言語を使うためには、そこまでのファイルパスを環境変数に設定して、文字通り道を作ってあげないと召喚できない、使えない。
パスはそのコマンドなどの情報が保存されているファイルまでの道のことらしい。
Linuxやmac、多分Winも新しい言語とかツールとかをインストールした時にこのパスを通す作業をしないとそのコマンドが使えないことがあるみたい。

「パスが通ってない」とは

コマンドを入力したのに、command not found(コマンド見つからなかった)と出る状態。

例えば仮にアイウエオがあって、アイウエオとコマンドを打つとする。
そうすると以下になったりする。

$ アイウエオ
-bash: アイウエオ: command not found

そんなコマンド知らないよ。(=そんなんどこにあるの?)となる。
実際にはインストールしたのに!コマンドのファイルがあるのに!って思っても、そこまでのパスが通っていないので、そのファイルがどこにあるのかPCは分からず、見つからない時もこれが出る。

お使い行って、お店がわからなくて、そのまま帰ってきたみたいな感じ。。

いざパスを通す(一時的ver.)

パスを通すとは、具体的には$PATHという変数に、そのコマンドが入っているファイルへのファイルパスを登録して道を教えてあげることです。
ということで、まずはその$PATHの中に何が入っているのか、$ echo $PATHコマンドを入力して見てみましょう。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

出力された/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin$PATHの中身です。
:までで1区切りとして読み、左側にいくにつれて優先順位が高くなります。

そのため、上記出力例でいくと、以下の様になります。

優先順位ランキング
1位 /usr/local/binさん
2位 /usr/binさん
3位 /binさん
4位 /usr/sbinさん
5位 /sbinさん

$PATHという変数の中身を確認したら、追加したいコマンドのファイルパスをFinderとかを使って予め調べておいて、ターミナルに以下を入力します。

$ export PATH=$PATH:加えたいコマンドのファイルパス

けれども、これだとターミナルを閉じるとまた初期化されて元どおりになってしまい、再度開いてコマンドを入力するとcommand not foundになってしまいます。。

いざパスを通す(永遠にver.)

恒久的にパスを通す、つまりPCを立ち上げ、ターミナルを開いたらいつでも使える状態にしておくためには.bash_profile.profile, .bsh, .zshrcみたいなファイルへパスを書いて保存します。

.bash_profile.profile, .bsh, .zshrcなどはホーム(macだとユーザー名のディレクトリ直下)に入っているみたいなので、今ターミナルで開いている階層がホームではない人は、何も考えずにターミナルウインドウを×ボタンで消して、また立ち上げるか、別にターミナルウインドウを新しく開いてそこでやるとか、cdとだけターミナルに打ち込むとかして、ホームに移動しましょう。

そこで、以下のls -aコマンドを入力してどんなドットファイルが入っているのか、確認しましょう。

$ cd
$ ls -a

ls -aをすると今いる階層(ちゃんとホームにいますよね?)にある、ドットファイルを含めた、そこの階層にあるもの全てが一覧表示されます。

あとはviコマンドでそれらを開いて、編集しましょう。

$ vi 編集するファイル名

viコマンドを打ったら、少し変わった表示になったと思います。
viはターミナル上でそのまま使えるテキストエディタです。なので、実はこの作業は全部ターミナルでやらなくても、ドットファイルを直接VS Codeみたいなエディタで開いて編集するのでもいいです。

今回はあっちこっち移動するのも面倒なので全部ターミナルで終わらせます。ちょっとプロっぽい瞬間です。

viコマンドでファイルを開いただけでは、入力ができないので、Iキーを押してインサートモードにして入力ができる状態にし、先に何か書いてあったら最終行にさっきの追加したいコマンドのファイルパスを入力します。

↓こういつやつを書き込む。
PATH=$PATH:加えたいコマンドのファイルパス

入力が終わったら、Escキーでインサートモードを解除し、:キーと、wキーと、qキーを、順番にキー入力して、編集内容を保存してエディタを閉じます。

ここまでくれば、あとはターミナルのウインドウを消して、ターミナルを立ち上げ直せば再起動したことになり、先ほどの編集内容が反映されるはずです。

再起動が面倒であれば以下のコマンドで編集内容を反映させる方法もあります。

$source ~/.bash_profile

「コマンドの情報が入っているファイルの場所を調べるコマンド」でパスが反映されてるか確認

先ほど通したパスが、きちんと通っているか確認します。

そのために、コマンドのパス情報がどこのファイルに入っているのか確認する以下のコマンドを入力してみましょう。

$ which コマンド名

実行例

$ which pyenv
/usr/local/bin/pyenv
0
2
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
0
2