Bash
Linux
shell
初心者

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

・対象:IT初心者「しょぼん君」image.png

しょぼん君:image.png『パスを通すってどういう事ですか』



パスを通すとは

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

しょぼん君:image.png『パスにパスを追記するって言われても...なんのために』

普段シェルスクリプトなどを実行するときには、ターミナルで、「./hoge/foo/bar.sh」などパス(道のり)を指定して実行すると思います。これでもいいんですが、数や頻度が多くなると、cdしたりlsしたりしながら探したり...ちょっと面倒ですよね。

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

しょぼん君:image.png『環境変数PATHに、よく使う道(パス)を教えておけば、実行ファイル名だけで実行してくれるようになるんだね』


環境変数PATH

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

しょぼん君:image.png『環境変数なら共通の変数として色んなシェルスクリプトから使えたりするんだな』

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


環境変数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

しょぼん君:image.png『よく使う「ls」や「pwd」があるね。これらも実行ファイルで、PATHにパスが書いてるからコマンドとして使えるんだね』

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


環境変数PATHへの追記.

#環境変数PATHの右側にパスを追記(優先度低)

$ export PATH=$PATH:/hoge/foo

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


しょぼん君:image.png『あれ、でもこれじゃあターミナルを閉じたら消えちゃうよね?』


環境変数PATHを永続的にする

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

しょぼん君:image.png『毎回勉強してから起動してもらうんやね。』

ターミナルのデフォルトではbashというシェルが起動されます。シェルは私たちと機械の仲介役で通訳のような役割をします。

ターミナルを起動すると通訳:bashさんが呼ばれ、設定ファイルである「bash_profile」や「bashrc」が読み込まれます。

環境変数は起動時に一度読み込まれたら良いので起動時に読み込まれる「bash_profile」に記載するのがベターです。bash_profileはホームディレクトリ配下の隠しファイルとして存在します。なければ作りましょう。


bash_profileがあるか確認.

$ ls -al | grep .bash



bash_profileの編集・作成.

$  vi ~/.bash_profile

# 追記
export PATH=$PATH:/hoge/foo


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


設定の反映.

$ source .bash_profile


しょぼん君:image.png『パスを通したから、どこからでも実行出来るようになって楽チンだぜ。これで手順書も薄く...ククク』


TIPS

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


バージョン確認.

$ which ls

/bin/ls

END