UNIXの部屋 コマンド: PATH


※空白区切りで AND 検索 (例:「ファイル 削除」)

環境変数 PATH プログラムの置いてあるディレクトリ名を設定する

ls とタイプすると /bin/ls が実行されるのはパスという仕組みのおかげである。
% setenv PATH /bin:/usr/bin:/usr/local/bin:$HOME/bin
とした場合、lessとタイプすると、
/bin/less
/usr/bin/less
/usr/local/bin/less
~/bin/less
の順にプログラムが検索され、コマンドが見つかるとそれが実行される。もし /bin/less が存在すればそれが実行される。もし /bin/less がなくて、/usr/bin/less が存在すれば、/usr/bin/less が実行される。もし /usr/bin/less と /usr/local/bin/less の両方が存在すれば先に書いてある方の /usr/bin/less が実行される。

単に「less」とタイプしたとき、/usr/local/bin ではなく ~/bin/less を実行したかったら、
% setenv PATH $HOME/bin:/bin:/usr/bin:/usr/local/bin
などとパスの順番を変えるか、alias で
% alias less ~/bin/less
と設定すればよい。

同名のコマンドが複数存在するかどうかを調べる場合は where コマンドを使う (csh・tcsh の場合)。
% where foo
/usr/bin/foo
/usr/X11R6/bin/foo
この場合は先に表示されている /usr/bin/foo が実行されることになる。

シェル変数 path を変更すると、即座に環境変数 PATH にも反映される。逆も同じである。つまり、パスを設定するには、シェル変数 path を設定してもよいし、環境変数 PATH を設定してもよいということである。

なお、上記のようにパスに `.' (カレントディレクトリ) を含めるのは危険である。例えば
% set path = ( . /bin /usr/bin ~/bin /usr/local/bin )
としていた場合、
% cd /tmp
% ls
とすると、/tmp/ls が存在するとそれが実行されてしまう。もし/tmp/ls の中身が
#!/bin/sh
/bin/rm -rf $HOME
だったとしたら、あなたのホームディレクトリのファイルは全て消えてしまうことになるわけだ。
>> コマンド rehash *   where *   which *
>> Cシェル変数 path *


頑張って書いたおすすめコンテンツ!