
Windows Subsystem For Linux (WSL) の Windows に Ubuntu 18.04.4 LTS をインストールしました。bash ターミナルに存在しないコマンドを実行すると (たとえば、誤って に余分な s を追加した場合ls
)、次のエラーが発生します。
$ lss
-bash: /usr/bin/python: No such file or directory
エラーは正しいです。python3 のみがインストールされているのです:
$ ls /usr/bin/python*
/usr/bin/python3 /usr/bin/python3-jsonpatch /usr/bin/python3-jsonschema /usr/bin/python3.6m
/usr/bin/python3-jsondiff /usr/bin/python3-jsonpointer /usr/bin/python3.6 /usr/bin/python3m
以前Ubuntuを使用していたとき、メッセージは「プログラム 'lss' は次のパッケージにあります:」であるべきだったと覚えています。もうそのメッセージは必要なく、動作させるためにpython2をインストールしたくありません(この質問にはpy2をインストールすることで問題を解決するための答えがあります)。
Python2 をインストールしたり、Python 3 を 2 としてシンボリックリンクしたり、完璧になって二度とタイプミスをしないようにしたりせずに、これを修正することは可能ですか?
理想的には、「コマンドが存在しません」スクリプトをPython3に移植するか、完全に無効にする。
答え1
Python3 は Python2 の代替品ではありません。 の Python3 バージョンが必要ですlss
。
もし私があなただったらアップデートしますlss
。これはスタンドアロンのスクリプトで、ソースは以下にあります。ギットハブ1は明らかです:
print 'Usage:', __file__, '/path/to/dir'
Python3 を使用する場合、「print」では「(」と「)」を使用する必要があります。スクリプトをlss3
またはそれに似た名前のファイルに入れて、python3 lss3
エラーを見つけて修正するために使用します。
答え2
結局、関数をオーバーライドしていたことが判明しましたcommand_not_found_handle
(bashの機能python
) を、bashrc 内で直接呼び出されるものに変更します。
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/bin/python /usr/lib/command-not-found -- $1
return $?
else
return 127
fi
}
fi
このコードはもう必要ありません (必要だったでしょうか?)。このコードを削除すると問題は解決しました。これで、以前の「次のパッケージで見つかります」という出力が再び表示されます。
完全性のために: Python コードとコマンドが存在しないという単純な出力をスキップしたい場合は、これを bashrc に追加します。
function command_not_found_handle {
echo Command not found: $1
return 127
}