はあなた$PATH
の他の場所に同じ名前の別の実行可能ファイルを持っていますか?その場合、bashはハッシュテーブルを使用して余分な$PATH
ルックアップ(Command Search and Execution参照)を避けるため、間違った実行可能ファイルを実行している可能性があります。
たとえば、$PATH
が/opt/local/bin:/usr/bin
で、grep
が/usr/bin
にのみインストールされているとします。今
$ echo $PATH
/opt/local/bin:/usr/bin
$ which grep
/usr/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
を、あなたの$PATH
/usr/bin
より早いである、/opt/local/bin
へgrep
の新しいバージョンをインストールしているとします。あなたはgrep
を実行すると、あなたは明白な結果を得ます。 which
は常にフル$PATH
検索を毎回行いますが、bashはハッシュテーブルを保持しているため、bashはまだコマンドそのgrep
マップ/usr/bin
の1に考えて:あなたは、この問題を診断するためにtype
builtinを使用することができます
$ which grep
/opt/local/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
$ /opt/local/bin/grep --version
GNU grep 2.6.3
。 type
は、コマンドがシェル組み込み関数、別名、関数、キーワード、または実行可能ファイルのいずれであるかを示します。後者の場合は、実行可能ファイルへの完全なパスが表示されます。
$ type grep
grep is hashed (/usr/bin/grep)
これをどのように修正しますか? hash
組み込み関数を使用すると、ハッシュテーブルを操作できます(詳細については、help hash
を入力してください)。 1つのエントリ(この場合はgrep
)を修正したい場合はhash -d grep
に「grep
のハッシュテーブルエントリを削除する」と答えることができます。この場合、次にgrep
を実行すると、期待通りに$PATH
が検索されます。たとえば、新しいソフトウェアを大量にインストールした場合や$PATH
を変更した場合など、ハッシュテーブル全体を消去する場合は、hash -r
を使用して空にします。
実行ファイルの名前は何ですか?それがa.outであると仮定し、pwd && ./a.outの出力は何ですか? (./はPATHの問題ではないことを確認するために重要です) –
この実行ファイルの名前は "qact" – Johnyy