前回は、bashの環境変数「PS1」を定義するとプロンプトが変化することを紹介した。シェルが起動するときに参照するファイル -- 複数あるが「~/.bash_profile」としておく -- で環境変数を定義すると、ターミナルとともにシェルが起動されるので(シェルの、感覚的にはターミナルの)設定として永続される、その特性を利用すればターミナルは"痒いところに手が届く"存在となりうる。今回は、基本&必須ワザを紹介するので、ターミナルとシェルの理解促進に役立てていただきたい。

環境変数を表示する

環境変数の定義へ進む前に、環境変数の内容を表示する方法について知っておきたい。ある環境変数に値を定義するとして、その環境変数が定義済かどうか、定義済であればどのような値かを確認しておくべきだからだ。

現在有効な環境変数を一覧するには、「printenv」コマンドを実行する。引数やオプションは必要なし、ただ「printenv」とだけ入力して行末でenterキーを押せばいい。OS X Yosemiteの初期設定では、/etc/profileに記述されたプログラムを実行し、後述する「PATH」などの環境変数を定義しているので、「~/.bash_profile」の有無にかかわらずそれなりの行数が表示されるはずだ。

$ printenv

特定の環境変数を表示するには、「printenv 環境変数」のようにprintenvコマンドを使うか、文字列を出力するコマンド「echo」を利用する。bashで変数を参照するときには冒頭に「$」をつけるので、「PS1」ならば「$PS1」、「LANG」ならば「$LANG」となる。この「$○○」という参照方法は、シェルを使ううえでの必須知識であるため、これを機会に覚えておこう。

$ echo $PS1

環境変数の内容を確認するときprintenvコマンドを使うのもいいが、echoコマンドを使う方法も知っておきたい

「パス」を定義する(基本編)

インストールしたはずのコマンドを実行すると「command not found」と表示される……これは、シェルのビギナーがもっとも陥りがちなトラブルだ。その原因はおそらく「パスを通していない」ことにある。

パスとは、コマンドがまとめて保存されている領域のことで、bashでは環境変数「PATH」で定義される。OS Xでは、Leopardのときからパス定義用コマンド「path_helper」を提供し、この処理を自動化している。逆にいえば、このコマンドがサポートしていない領域は、手動で「PATH」を再定義しないかぎり、フルパス(コマンドが保存されたディレクトリをすべて記述)でコマンドの位置を明示しなければならない。

その「path_helper」はOS X独自のコマンドで、しかも「パスが通っていない」領域(/usr/libexec)に保存されている。だから前述したとおり、「/usr/libexec/path_helper」とフルパスでなければ実行できないが、当然ながら「/usr/libexec」にパスを通せば「path_helper」だけで実行できる。

パスの定義は、すべてを定義し直すか、すでにある定義にくわえるかの2通りある。すべてを定義し直す場合は、「PATH="パス1:パス2:パス3...."」の要領で記述すればいい。パスとパスの区切りには「:(コロン)」、全体は「"(ダブルクォート)」で囲むことがポイントだ。なお、「"」は必須ではないが、なければパスにスペースを含むとき問題となるため、囲むものと覚えておこう。

$ export PATH="/bin:/usr/bin"

しかし、多くの場合「デフォルトのパス+α」が必要とされるはずで、すでにあるパスの設定をわざわざ消すことはない。そんなときは、以下の要領で記述しよう。基本的な書式はすべてを定義し直す場合と同じだが、「PATH=」に続けて現在のPATH環境変数($PATH)を参照し、そのあと追加するパスを記述している点が異なる。

$ export PATH=$PATH:"/usr/libexec"

この定義は、前述した「/usr/libexec/path_helper」を「path_helper」だけで実行する目的に使える。言い換えると、「/usr/libexc」にパスが通ったためフルパスを指定する必要がなくなり、コマンド名だけで実行できるようになった、というわけだ。つまり、このような「export PATH=$PATH:……」という一文を「~/.bash_profile」に記述しておけば、どこにコマンドを保存していても「command not found」は現れなくなるはずだ。

パスを通す方法を知っていれば、「command not found」に悩まされることはなくなるはず

なお、このPATH環境変数を使うパスの設定方法は、どのUNIX系OSにも共通して利用できるオーソドックスなもの。しかし、OS Xには「path_helper」という独自コマンドもあるため、次回はその使い方について説明したい。