症状
Linux Mint の bash で存在しないコマンドを叩いたら、次のような Python のエラーが出る。
Traceback (most recent call last): File "/usr/lib/command-not-found", line 27, in <module> from CommandNotFound.util import crash_guard ImportError: No module named 'CommandNotFound'
思い当たる節
Dropbox を make install
した後に make uninstall
した。それ以来これが出るようになった。
思い当たる節も何もこれが原因じゃん。
んなわけないじゃん!!!!
pyenv 導入してたのと、/usr/lib/command-not-found の挙動のせいでした。
解決策
$ sudo apt-get install --reinstall command-not-found python-commandnotfound python3-commandnotfound
command-not-found というパッケージを再インストールしたら直った。
/usr/lib/command-not-found
を管理者権限で編集して、19〜20行目の、
if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ: os.execvp("python3", [sys.argv[0]] + sys.argv)
を、
if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ: os.execvp("/usr/bin/python3", [sys.argv[0]] + sys.argv)
に修正しましょう。これで直りました。
どうでもいい話
これが修復できるまで、存在しないコマンドを叩いたら sl
を走らせるようにしていた。
結果、生気が吸い取られたように感じただけだったので、あまりオススメしない。
~/.bashrc
に次のコードを書けばよい。
function command_not_found_handle { sl return 127 }
コマンドが存在しなかったら、bashは command_not_found
という関数を呼ぶので、それをオーバーライドすればよい。
なんで return 127
なのかは知らない……。
Linux Mint、地味にUbuntuやDebian向けの.debファイルが使えないことがあって、自前ビルドする機会が多い。
というわけで Kubuntu に移行した。