初心者がパスを通す(´･ω･`)

#この記事について
 
■ 対象：<font color="DeepSkyBlue">**IT初心者しょぼん君：**</font color>(´･ω･`)
・初心者向け、イメージを掴むキッカケになることが目的の記事
・砕いた理解で、一部正確ではない場合があります。

■ しょぼん君のぼやき
<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『パスを通す』


#パスを通すとは
「パスを通す」とは、環境変数のPATHに実行ファイルまでのパスを追記することです。


<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『パスにパスを追記するって言われても...』


普段シェルスクリプトなどを実行するときには、ターミナルで、「./hoge/foo/bar.sh」などパス（道のり）を指定して実行すると思います。これでもいいんですが、ちょっと面倒です。

環境変数PATHによく使う実行ファイルのパスを書くことで、どこのディレクトからでも実行ファイル名だけ（上の例だと、bar.sh だけ）で実行出来るようになります。ターミナルで実行されたコマンドは、環境変数PATHを元に検索され実行されます。そのため、環境変数のPATHのことをコマンドサーチパスなんて言ったりもします。



<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『環境変数PATHに、よく使う道（パス）を教えておけば、実行ファイル名だけで実行してくれるようになるんだね』


#環境変数PATH
「環境変数」は、プロセスの中で宣言する「シェル変数」よりも有効範囲が広い変数で、ターミナルを終了(exit)するまでパソコンが覚えている変数のことです。

<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『環境変数なら共通の変数として色んなシェルスクリプトから使えたりするんだな』

さっそく、環境変数PATHの中身を確認してみましょう。

```環境変数PATHの確認.
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
パスはコロン（：）で区切られていて、コマンド実行時には、左のパスから優先的に検索をして実行ファイルを実行します。
例えば、環境変数PATHに登録されている/bin配下を確認してみます。

```環境変数PATHの確認
$ ls /bin/
[		chmod		date		domainname	expr		ksh		ln		mv		pwd		sh		sync		unlink
bash		cp		dd		echo		hostname	launchctl	ls		pax		rm		sleep		tcsh		wait4path
cat		csh		df		ed		kill		link		mkdir		ps		rmdir		stty		test		zsh
```


<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『よく使う「ls」や「pwd」も実行ファイルで、PATHにパスが書いてるからコマンドとして使えるのか』


環境変数のPATHに追記をするには、以下のexportコマンドを使います。

```環境変数PATHへの追記.
#環境変数PATHの右側にパスを追記（優先度低）
$ export PATH=$PATH:/hoge/foo

#環境変数PATHの左側にパスを追記（優先度高）
$ export PATH=/hoge/foo:$PATH
```

<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『あれ、でもこれじゃあターミナルを閉じたら消えちゃうよね？』


#環境変数PATHを永続的にする
上述では、ターミナル起動後に「閉じるまでは環境変数PATHはこうするよ」と教えていたのでexitすると消えてしまいました。
そこで、ターミナル起動時に「閉じるまでは環境変数PATHはこうするよ」を毎回教えるように設定すればターミナルを閉じたり再起動しても環境変数を利用することが出来ます。


<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『毎回勉強してから起動してもらうとな』

### bash

ターミナルのデフォルトではbashというシェルが起動されます。(MacOS:Catalina以降はzsh)
シェルは我々とPCの仲介役で、通訳のような役割をします。

ターミナルを起動すると通訳である bash さんが呼ばれ、設定ファイルの「bash_profile」や「bashrc」が読み込まれます。
永続的に設定するためには、起動時に読み込まれる「bash_profile」に記載するのがベターです。bash_profileはホームディレクトリ配下の隠しファイルとして存在します。なければ作りましょう。




```:.bash_profileがあるか確認、なければ作成、追記、反映
$ ls -al | grep .bash

$ touch ~/.bash_profile

$ export PATH=$PATH:/hoge/foo
```

追記しただけでは変更が反映されないので、ターミナルを再起動してログインしなおすか、sourceコマンドで設定を読み込み直します。

```:設定の反映
$ source ~/.bash_profile
```


### zsh

MacOSが新しくなったタイミングで、デフォルトシェルがzshになりました。
<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『$マークから%に変わっとる』

```
# デフォルトシェルを確認
% echo $SHELL
/bin/zsh

# 使えるシェル一覧も見てみる
% sudo cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

```

zshでは .zshrc に設定を記載し読み込みます。ホームディレクトリ配下になければ作りましょう。


```:.zshrcがあるか確認、なければ作成、追記、反映
# なければ作成
% touch .zshrc 

# 追記
export PATH="$PATH:$HOME/.composer/vendor/bin"

# 変更反映
source ~/.zshrc
```








<font color="DeepSkyBlue">**しょぼん君：**</font color>(´･ω･`)『パスを通したら、どこからでも実行出来るようになって楽チンだぜ...ククク』

#TIPS
コマンドからパスを探したいときは、which コマンドを使います。

```:Which
$ which ls
/bin/ls
```

# Appendix
■ リンク
- [しょぼん君シリーズの他記事(´･ω･`)](https://qiita.com/shobooon/items/90b0d1d7db5e7bd6ca56)


END