コマンド検索のパス(path)

Unixでの、実行可能なプログラムには、機械語のプログラムとシェルスクリプト があります。 シェルスクリプトについては別記事 を参照してください。

% ls -l
でみて、 rwxrwxrwx のようになっている、「x」が、実行可能であることを 示しています。

Unix上の操作を説明するとき、 「コンパイルしてできた機械語のプログラム a.out は、 そのままその名前を打てば実行できます」と述べることがよくあります。 ただし、このようにプログラムのファイル名だけで実行するには条件があります。 現在いるディレクトリが、コマンド検索対象のディレクトリ群(pathという)に 含まれていなければなりません。 そうでないときは、/ で始まる絶対的位置、あるいは ~ で始まる相対的位置を 指定するか、あるいは、現在いるディレクトリの a.out である」ことを 明示するように、

%    ./a.out
のような形で実行する必要があります。 (Unixで、「.」は、カレントディレクトリを示します。)

みなさんの初期設定ファイル .cshrc の中に、C-shellのpathという変数の 値を与えているところがあります。 この中に、空白でくぎられて、「 . 」だけの要素があるでしょうか。 これがあれば、どこに移ろうと、そのときどきの カレントディレクトリにあるコマンドは、ディレクトリ指定なしで使える ことになります。

C-shell変数の値の一覧は、

% set
で見ることができます。 また、C-shell変数 path の値は、環境変数 PATH にもコピーされているので、
% printenv PATH
でも、原則として同じものが見られるはずです(くぎりが空白からコロンに 変わっています)。

コマンド検索パスに「.」を含める設定は便利ですが、 よく知らないディレクトリに cd したとき、うっかりコマンドを実行すると 意外なものが動いてしまって危険なこともあるでしょう。 したがって、

「pathに . を入れるな。 カレントディレクトリのコマンドの実行は必ず ./a.out のような形にせよ。」
という教育方針の先生も、世の中には多いです。


1996-07-14; 2000-04-18; 2003-05-08
増田 耕一 (MASUDA Kooiti)

[目次へ]