私が歌川です

@utgwkk が書いている

Linux Mint で存在しないコマンドを叩いた時の処理がバグっていたので、何とか修復した

症状

Linux Mintbash で存在しないコマンドを叩いたら、次のような 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'

思い当たる節

Dropboxmake 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
}

コマンドが存在しなかったら、bashcommand_not_found という関数を呼ぶので、それをオーバーライドすればよい。
なんで return 127 なのかは知らない……。

Linux Mint、地味にUbuntuDebian向けの.debファイルが使えないことがあって、自前ビルドする機会が多い。
というわけで Kubuntu に移行した。

参考