Как исправить ошибку «/usr/bin/python: Нет такого файла или каталога» при вводе недопустимой команды в bash?

Как исправить ошибку «/usr/bin/python: Нет такого файла или каталога» при вводе недопустимой команды в bash?

Я только что установил 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
}

Связанный контент