#この記事について
■ 対象:IT初心者しょぼん君:(´・ω・`)
・初心者向け、イメージを掴むキッカケになることが目的の記事
・砕いた理解で、一部正確ではない場合があります。
■ しょぼん君のぼやき
しょぼん君:(´・ω・`)『パスを通す』
#パスを通すとは
「パスを通す」とは、環境変数のPATHに実行ファイルまでのパスを追記することです。
しょぼん君:(´・ω・`)『パスにパスを追記するって言われても...』
普段シェルスクリプトなどを実行するときには、ターミナルで、「./hoge/foo/bar.sh」などパス(道のり)を指定して実行すると思います。これでもいいんですが、ちょっと面倒です。
環境変数PATHによく使う実行ファイルのパスを書くことで、どこのディレクトからでも実行ファイル名だけ(上の例だと、bar.sh だけ)で実行出来るようになります。ターミナルで実行されたコマンドは、環境変数PATHを元に検索され実行されます。そのため、環境変数のPATHのことをコマンドサーチパスなんて言ったりもします。
しょぼん君:(´・ω・`)『環境変数PATHに、よく使う道(パス)を教えておけば、実行ファイル名だけで実行してくれるようになるんだね』
#環境変数PATH
「環境変数」は、プロセスの中で宣言する「シェル変数」よりも有効範囲が広い変数で、ターミナルを終了(exit)するまでパソコンが覚えている変数のことです。
しょぼん君:(´・ω・`)『環境変数なら共通の変数として色んなシェルスクリプトから使えたりするんだな』
さっそく、環境変数PATHの中身を確認してみましょう。
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
パスはコロン(:)で区切られていて、コマンド実行時には、左のパスから優先的に検索をして実行ファイルを実行します。
例えば、環境変数PATHに登録されている/bin配下を確認してみます。
$ 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
しょぼん君:(´・ω・`)『よく使う「ls」や「pwd」も実行ファイルで、PATHにパスが書いてるからコマンドとして使えるのか』
環境変数のPATHに追記をするには、以下のexportコマンドを使います。
#環境変数PATHの右側にパスを追記(優先度低)
$ export PATH=$PATH:/hoge/foo
#環境変数PATHの左側にパスを追記(優先度高)
$ export PATH=/hoge/foo:$PATH
しょぼん君:(´・ω・`)『あれ、でもこれじゃあターミナルを閉じたら消えちゃうよね?』
#環境変数PATHを永続的にする
上述では、ターミナル起動後に「閉じるまでは環境変数PATHはこうするよ」と教えていたのでexitすると消えてしまいました。
そこで、ターミナル起動時に「閉じるまでは環境変数PATHはこうするよ」を毎回教えるように設定すればターミナルを閉じたり再起動しても環境変数を利用することが出来ます。
しょぼん君:(´・ω・`)『毎回勉強してから起動してもらうとな』
bash
ターミナルのデフォルトではbashというシェルが起動されます。(MacOS:Catalina以降はzsh)
シェルは我々とPCの仲介役で、通訳のような役割をします。
ターミナルを起動すると通訳である bash さんが呼ばれ、設定ファイルの「bash_profile」や「bashrc」が読み込まれます。
永続的に設定するためには、起動時に読み込まれる「bash_profile」に記載するのがベターです。bash_profileはホームディレクトリ配下の隠しファイルとして存在します。なければ作りましょう。
$ ls -al | grep .bash
$ touch ~/.bash_profile
$ export PATH=$PATH:/hoge/foo
追記しただけでは変更が反映されないので、ターミナルを再起動してログインしなおすか、sourceコマンドで設定を読み込み直します。
$ source ~/.bash_profile
zsh
MacOSが新しくなったタイミングで、デフォルトシェルがzshになりました。
しょぼん君:(´・ω・`)『$マークから%に変わっとる』
# デフォルトシェルを確認
% 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 に設定を記載し読み込みます。ホームディレクトリ配下になければ作りましょう。
# なければ作成
% touch .zshrc
# 追記
export PATH="$PATH:$HOME/.composer/vendor/bin"
# 変更反映
source ~/.zshrc
しょぼん君:(´・ω・`)『パスを通したら、どこからでも実行出来るようになって楽チンだぜ...ククク』
#TIPS
コマンドからパスを探したいときは、which コマンドを使います。
$ which ls
/bin/ls
Appendix
■ リンク
END