「間違った」実行可能ファイルが実行されるのはなぜですか? [コピー]

「間違った」実行可能ファイルが実行されるのはなぜですか? [コピー]

走ろうとしています。Python~から強く打つ(バージョン4.4.19)コマンドライン。

ipython私はPython開発者として、virtualenvさまざまなパスにさまざまなPythonバージョンがインストールされているので、どのバージョンを実行しているかを知ることが重要です。したがって、$PATH私が変更するとvirtualenv常に変更され、これは次の一般的な値になりますPATH

$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin

ここで重要な詳細は、最初の項目が " /Users/jab/.virtualenvs/tools/bin"であり、ファイルが/Users/jab/.virtualenvs/tools/bin/ipython存在することです。

$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython

予想どおり、ファイルは ""コマンドでwhich実行されることを意味します。$ ipython

$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython

$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python

しかし、これは真ではなく、代わりに/usr/local/bin/ipython実行されます。

$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3

bash私が無視され、$PATH「間違った」実行可能ファイルを使用する理由を誰か説明できますか?何を変更する必要がありますか?私のbashrc、または私のシステム(macOS 10.12.3)でbashに、私が決めた順序で実行可能ファイルを選択させます$PATH

注:これは重複しません。私のパスにあるプログラムですが、Bashはプログラムを見つけることができません。、これはPATHに見つける方法を尋ねるからです。どのプログラム、そして質問はなぜ間違ったプログラムを見つけました。

答え1

以前のbashセッションで「無効な」実行可能ファイルが呼び出され、Bashはそのパス名を覚えているようです(これは正常です。この機能はPATH既知のコマンドに対する追加の照会を防ぎます)。

この問題を解決するには、以下を実行する必要があります。

$ hash -d ipython

これにより、記憶された場所が消去されるため、ipythonBashはコマンドを検索するために再度検索する必要がありますPATH(この時点で正しい実行可能ファイルを探します)。

関連情報