問題「sudo pip install --upgrade pip」後にpipコマンドが使えない
sudo pip install --upgrade pipでpipをアップデートしたら、色んなpipコマンドを試したが、bash: /usr/bin/pip: No such file or directoryって言われた。
解決法 hash -r
hash -rをターミナルで実行したら直った。
自分なりの解釈
参考サイトによると、
シェルがビルトインコマンドではないコマンドを実行する場合、環境変数PATHから該当する実行ファイルを探す必要がありますが、頻繁に使うコマンドは「ハッシュテーブル」と呼ばれる場所に記憶しています。「hash」はこのハッシュテーブルの表示や削除、追加を行うコマンドになります。
要するに、OSは、「内蔵されていない、頻繫に使うコマンド」をハッシュテーブルに記憶しているということだ。
つまり、
- pipをインストールしたとき、前バージョンのpipはアンインストールされた
- だが、ハッシュテーブルには前バージョンのpipのPASSが記憶されままだった
- ターミナルでpipコマンドを実行しても、OSはハッシュテーブルを見て、前バージョンのpipを探した
- 前バージョンのpipはアンインストールされていたから見つからない
といった具合だろうか。
次起こった時は?
参考サイトによると、
hash -rはハッシュテーブルに記憶しているパス情報を消去する
らしい。これでは前バージョンの情報以外の削除してほしくない記憶まで消されそうだ。そこで、
hash -d コマンド名はコマンド名に対応する記憶を削除する。
また、
hashだけを実行すると、ハッシュテーブルに記憶されているパス名と、そのパスでコマンドを実行した回数が表示されます。
とあるので次回は、まずhashでハッシュテーブル内を確認し、hash -d コマンド名で不要な記憶だけを削除しようと思う。