fr33f0r4ll

自分用雑記

apt upgradeでpyenv: xxxx: command not foundが出たときの対処法

command not found

いつも通りapt upgradeしようとしたらiconvコマンドが見つからなくて失敗したのでその対処法。

iconvに限らずコマンドが見つからない系の問題には似たような対処法ができると思う。

コマンドが使えるかどうか確認してみる

普通にターミナルからコマンドを使ってみて使えるかどうかを確認してみる。 今回の場合はpyenvのコマンドが見つからないエラーが出た。 もし探しているのがそのコマンドでいいなら、pyenvで環境を切り替えれば解決するはず(pyenv自体もう非推奨というか、別の方法が推奨されているので乗り換えた方がいいらしい)。

正しくないコマンドが使われている場合

今回の場合は探しているiconvはpythonのコマンドではなかったはずなので、他にiconvが存在していないかどうかを調べる。 whereis iconvlocate iconvを使えば、名前や正規表現でファイルを探せる。

whereisは実行ファイルやソースファイル、マニュアルを探すので、コマンドを探したいときはこっちの方がいい。

locateは全ファイルから探索する(あらかじめ作成したデータベースから検索するので高速に動く)ので、どこにあるか分からない場合に使える。

見つけたiconvコマンドをフルパスで実行すると正常に動作したため、どうやら参照するコマンドが違うようである。 この辺はpyenvの問題かもしれない、現在の環境で存在しないコマンドでもサジェストを出すために補足するようになっているらしく、シェルが実行ファイルのパス探索を止めてしまう。 pyenvのパスはPATHの後半に登録すべきかもしれない。

解決策は簡単で、pyenvより先に本来の実行ファイルが参照できるようにしてやればいい。 iconv/usr/binに存在しているなら、PATH="/usr/bin/:$PATH"とすれば本来のiconv`コマンドが先に参照される。

コマンド自体がなかった場合

インストールしよう。