2016-03-31 14 views
1

PATHに/ usr/binがあり、PATHの後ろにドット(現在のディレクトリを意味します)があります。私は/ varと/ someotherの2つのディレクトリにプログラム 'abcxyz'を持っています。私が/ varのメイト端末にいて、なんらかの不条理な名前のdgxuznkを入力した場合、bashは次のように言っています。 "bash:dgxuznk:コマンドが見つかりませんでした"。もし/ usr/binにあるdgxuznkというリンクを/ someotherの中のプログラムを指しているとすれば、あなたも期待通りにプログラムを実行します。しかし、私は今、そのリンクを削除すると、 "コマンドが見つかりません"というよりむしろ "bash:/ usr/bin/dgxuznk:そのようなファイルやディレクトリはありません"と言います。以前と同じ場所を覚えていて、/ usr/binの下に置かれていると思います。LinuxでPATH検索を中断する方法を教えてください。

さらに悪いことに、/ var(私がいる場所)のプログラム名をdgxuznkに変更し、 "dgxuznk"を入力すると、 "bash:/ usr/bin/dgxuznk:No such file or directory" PATHの/ usr/binを越えてドットを見ることができず、現在のディレクトリを見てプログラムを見つけることができない場合。

これはFedora 19でのみですか?検索パスの/ usr/binを越えて現在のディレクトリのドットを見つけるようにプログラムするにはどうすればよいですか?

(ヒント:あなたは、このエラーを再現したい場合は - それが、/ usr/binにそれを見つけただ後まで、それは現在のディレクトリ内のプログラムを見つけることはできません)

+1

'$ PATH'に' .'を入れないでください。それは起こるのを待っているセキュリティ上の問題です。 –

答えて

6

bashは、メモリ内のハッシュを維持しますコマンドが実行されるたびにフルパスルックアップを行う必要がないように、プログラムが見つかった場所を指定します。各bashセッションは独自のハッシュを保持しますが、組み込みのhashコマンドで操作できます。何がハッシュ内にあるかを見るには、引数なしで実行してください。クリアするには、hash -rを使用します。あなたの場合、dgxuznkhash -d gdxuznkで削除したいだけです。

(場所が見つからない場合、なぜbashがハッシュからエントリを削除するだけではないかと尋ねるかもしれません)パスルックアップに落ちるのではなく、エラーを報告するのには良い理由があるかもしれません。バグや改善すべき領域)

+0

ありがとうございました。私は 'ハッシュ'が存在するかどうかは分かりませんでした。しかしそれは反乱に等しい!それがPATHリストにある場合、プログラムの実行をあきらめるべきではありません。また、PATHのディレクトリのORDERを特別に設定して、適切なものを選ぶことができるという誤った操作です。このハッシュ事はそれを打ち負かすだろう。また、来て、それがリストの中にあるときにそれがプログラムを見つけることができなかったと言う!私は焦っている!それを無効にする方法はありますか? – Clive

+0

私はあなたがそれを無効にすることはできませんが、 'PATH'を変更するたびに' hash -r'でクリアすることができます。しかし、 'PATH'は' bash'セッション中に頻繁に変更する必要があるものではありません。 – chepner