コマンドが実行される時、シェルは変数(配列)pathによって指定されたディレクトリの中にあるコマンドを実行する。
もし同じ名前のコマンドが違うディレクトリの中にあった場合は、
最初のディレクトリのコマンドが実行される。
変数pathの中に含まれるディレクトリの中に実行したいコマンドが無い場合には
Command not found.
などと表示されて実行することができない。
自分で作ったコマンドをどこのディレクトリにいても実行できるようにしたい時は
変数pathにコマンドを置いているディレクトリ名を加えて、rehashコマンドを
実行する。
例えば、binなどという名前のディレクトリをホームディレクトリの下に作っておいて
その中に自分で作ったコマンドをコピーしておくと良いだろう。
# echo $path <- 変数pathの中身を表示 /bin /usr/bin /usr/sbin /usr/bin/X11 /usr/local/bin # a.out a.out: Command not found. <- カレントディレクトリがpathに含まれていないので実行できない # ./a.out <- どのディレクトリのコマンドかを指定すれば実行できる # set path = ( $path . ) <- カレントディレクトリ( . )を加える # rehash <- 各ディレクトリ内のコマンドをシェルに覚えさせる # a.out <- 今度は直にa.outが実行できる # mkdir ~/bin <- ~/binを作る # cp a.out ~/bin/mycom <- ~/binにmycomという名前でコピーする # set path = ( $path ~/bin ) <- ~/binを加える # rehash # mycom <- mycomが実行できる #
変数pathにカレントディレクトリを含めるとセキュリティ上の問題となるので、 本当は含めない方が良い。