Subject: What's wrong with having '.' in your $PATH ? Date: Thu Mar 18 17:16:55 EST 1993
PATH リストの中の一つのディレクトリは、カレントディレクトリ "." であっ ても構いません。カレントディレクトリを指定するために PATH リストの中で 空のディレクトリ名を使用するのも許されます。これらは互いに同等です。
setenv PATH :/usr/ucb:/bin:/usr/bin setenv PATH .:/usr/ucb:/bin:/usr/bin
PATH=:/usr/ucb:/bin:/usr/bin export PATH PATH=.:/usr/ucb:/bin:/usr/bin export PATH
"." が PATH の最初にある場合に何が起こるか考えます。カレントディレクト リは "/tmp" のようにだれでも書き込めるとしましょう。もし、たまたま誰か 違うユーザーが残した "/tmp/ls" と言う名前のプログラムがあったとします。 そしてその時 (もちろん普通の "/bin/ls" プログラムを走らせるつもりで) "ls" と入力すると 、シェルは他のユーザーが作ったプログラムの "./ls" を 代わりに走らせるでしょう。すると言うまでもなく、このような見知らぬプロ グラムを実行してしまい驚くことでしょう。
"." が PATH の最後にあると、少し良いです。
setenv PATH /usr/ucb:/bin:/usr/bin:./tmp で "ls" を入力するとシェルは "ls" という名前のプログラムを探しま すが、今度は "." の中を探そうとする前に /usr/ucb, /bin, /usr/bin を見 るでしょう。すると誰か他のユーザーの作った "ls" というプログラムを不注 意に実行する危険は少なくなります。とは言うものの、これは 100% 安全な訳 ではありません。あなたが不器用なタイピストで、いつか "ls -l" の代りに "sl -l" と打ち込んだとしたら "./sl" を実行するという危険を冒します。 "./sl" というプログラムが存在すればの話ですが。"賢い" プログラマーの中 には、ありふれた入力ミスを予期し、そのような名前のプログラムを公のディ レクトリ中にばらまいておく者もいます。気をつけましょう。多くの熟練した UNIX ユーザは、PATH に全く "." を入れなくてもうまくやっています。
setenv PATH /usr/ucb:/bin:/usr/binこうすると、カレントディレクトリでプログラムを走らせるために "program" の代わりに "./program" と打ち込む必要があります。しかし安全性の向上は 恐らく手間をかけただけの価値があるでしょう。