Subsections

1.2 コマンド検索パス

1.2.1 コマンドの在処

実行しようとするコマンドがどこにあるのかを調べるために, which というコマンドが利用できます。 which の引数にコマンド名を与えると, そのコマンドの所在が絶対パス名で表示されます。 pwd, cal, emacs の各コマンドがどこにあるのかを調べるために
which pwd cal emacs
を実行してください。

1.2.2 コマンド検索パス

コマンド行にコマンド名をタイプすると,シェルは実行すべきコマンド(ファイ ル)を特定のディレクトリから検索します。そのディレクトリは
echo $PATH
を実行して調べることができますので,試してください 3
ディレクトリの絶対パス名が : (コロン) で区切られて表示されますが, 先ほど which を使って調べたコマンドの在処は, すべてこのディレクトリのリスト中に含まれているはずです。

第 1.1節で紹介したとおり,本来, pwd のようにファイルとして存在しているコマンドを実行するときには, パス名 (例えば pwd の絶対パスであれば /bin/pwd) を使う必要があります。しかし,それでは不便ですので, $PATH リスト 4 に含まれるディレクトリ内のコマンドについては, ファイル名 (コマンド名) のみで実行できるようになっているのです。 逆に言えば,このリストに含まれるディレクトリ以外の場所に ファイルとして存在するコマンドを実行するには, パス名を用いなければいけません。

ここで $PATH のリストに . (ドット = カレントディレクトリ) が含まれてい ないことに注意しましょう。 コマンド名でコマンドを実行しようとすると, その実体であるファイルはあくまで $PATH リスト内のディレクトリから検索されます。 したがって, $PATH リストに . が含まれていなければ, カレントディレクトリ内に存在するコマンドを, コマンド名のみで実行することはできません。 そのため, 仮にカレントディレクトリ内にコマンド com が存在するとして, それを実行したければ, カレントディレクトリに存在するコマンドであることを明示して ./com 等とする必要があります 5

なお,コマンド名でコマンドを実行する場合,$PATH リストの始めの方から, コマンドが探索されます。 したがって, 同名のコマンドが $PATH リストの中の複数のディレクトリに存在する場合, 始めの方のディレクトリに存在するものが実行されます。