【Mac】 パスを通す

2019年1月30日

シェルスクリプトを実行する際、~/Desktop/script.sh などと位置を指定するのは意外にダルい。
 良く使うシェルスクリプトは、パスの通った場所に置いておくと便利である。

パスを通った場所、というのはターミナルがコマンドを検索するフォルダのことだ。
 具体的にいうと、/usr/local/bin とか、/usr/bin というフォルダだ。ターミナルはコマンドを命ぜらたとき、これらのフォルダ内からコマンドを捜し出す。
 試しにファインダーで、command + shift + G で移動ダイヤログを出し、「/usr/bin」へ移動してみると、「cd」とか「sed」とかおなじみのコマンドを確認できる。
 パスは「echo $PATH」で確認できる。実行すると、下記のようにパスが表示される。
 これらはターミナル様が専用に使う御用達フォルダなのだ。

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

PATH は環境変数という特殊な変数で、ターミナル御用達フォルダのアドレスが格納されている。各アドレスは「 : 」で区切られる。
 export コマンドを用いればここに、ターミナル様をお迎えする自分専用のフォルダを追加できるのだ。

export でパスを設定してみる

新しいパスを export するには、下記のようにする。

export PATH=追加するアドレス:$PATH

デスクトップに「script」というフォルダがあったとして、そこを自分専用のパスとし、ターミナルに検索させたい、としよう。

$ export PATH=~/Desktop/script:$PATH⏎
$ echo $PATH⏎
/Users/ユーザ名/Desktop/script:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

追加したいパスとともに、既存のパスが格納された PATH をコロンで区切って指定し export する。
 これで「script」フォルダがパスに追加された。echo $PATH を実行すれば、確認できるはずだ。
 このフォルダに入れたシェルスクリプト、たとえば「script.sh」は、

script.sh

だけで実行できる。
 ただし、export で設定したパスは、ターミナルを終了させると元に戻ってしまう。あくまで一時的な設定なのだ。

.bash_profile を作成する。

.bash_profile は、ターミナルが起動する時かならず読みこまれる、ユーザーのための設定書類だ。
 ここに先ほどの

$ export PATH=~/Desktop/script:$PATH

を書きこんでおけば、起動のたびに export が実行されるという仕組みである。

macOS ではドットで始まる書類は隠しファイルになって表示されない。
 しかし、command + shift + . というショートカットを押せば隠しファイル、隠しフォルダを表示できる。
 .bash_profile はターミナルがホームとしているフォルダに作成する。通常は、家のアイコンで示されるユーザのホームである。

ドットで始まる書類を作るのに便利なのが「touch」コマンドだ。

$ touch ~/.bash_profile

ホームフォルダに .bash_profile があらわれる。
 これをCotEditor などで開き、先ほどの export を書きこむ。

$ export PATH=~/Desktop/script:$PATH

そして保存。文字コードは UTF-8、改行コードは LF でいいと思う。
command + shift + .で隠しファイルを元に戻し、ターミナルを再起動する。
 PATH を echo すると、script フォルダが追加されているのが確認できる。

$ echo $PATH⏎
/Users/ユーザ名/Desktop/script:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

追加したパスが不必要になった場合は、この .bash_profile を編集したり、.bash_profile 自体をゴミ箱に入れてしまえばいい、というわけだ。