
Я только что установил Ubuntu 18.04.4 LTS на Windows в подсистеме Windows Subsystem For Linux (WSL). Когда я запускаю команду, которая не существует в моем терминале 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'
"print" должен использовать "(" и ")" при использовании python3. Я бы поместил скрипт в файл с именем 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
}