Como faço para corrigir "/usr/bin/python: Esse arquivo ou diretório não existe" ao inserir um comando inválido no bash?

Como faço para corrigir "/usr/bin/python: Esse arquivo ou diretório não existe" ao inserir um comando inválido no bash?

Acabei de instalar o Ubuntu 18.04.4 LTS no Windows no Windows Subsystem For Linux (WSL). Quando executo um comando que não existe em meu terminal bash (por exemplo, se eu adicionar acidentalmente um s extra a ls), recebo este erro:

$ lss
-bash: /usr/bin/python: No such file or directory

O erro está certo, só tenho o python3 instalado:

$ 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

Do uso anterior do Ubuntu, lembro que a mensagem deveria ser "O programa 'lss' pode ser encontrado nos seguintes pacotes:" Não preciso mais dessa mensagem e não quero instalar o python2 apenas para fazê-lo funcionar (esta pergunta tem respostas para resolver o problema instalando o py2).

É possível corrigir isso sem instalar o python2, vincular simbolicamente o python 3 como 2 ou tornar-se perfeito e nunca mais cometer erros de digitação?

Idealmente, eu poderia portar o script "comando não existe" para python3 oudesative-o completamente.

Responder1

Python3 não é um substituto para python2. Você precisa de uma versão python3 do lss.

Eu atualizaria lssse fosse você. É um script independente e a fonte pode ser encontrada emGitHub. 1 é óbvio:

print 'Usage:', __file__, '/path/to/dir'

"print" precisa usar "(" e ")" ao usar python3. Eu colocaria o script em um arquivo chamado lss3ou algo parecido e usaria python3 lss3para localizar e corrigir erros.

Responder2

Acontece que eu estava substituindo a command_not_found_handlefunção (um recurso bash) com algo que chamou pythondiretamente no meu 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

Este código não é mais necessário (já foi?) E removê-lo resolveu meu problema - agora a antiga saída "pode ​​ser encontrada nos seguintes pacotes" novamente.

Para completar: se eu quisesse pular o código python e a saída simples de que o comando não existe, eu poderia colocar isso no meu bashrc:

function command_not_found_handle {
    echo Command not found: $1
    return 127
}

informação relacionada