Meus comandos de terminal do Ubuntu parecem estar rodando em python

Meus comandos de terminal do Ubuntu parecem estar rodando em python

Quando executo um comando errado no meu terminal Ubuntu, em vez de ecoar "comando não encontrado", o terminal não faz nada, e quando pressiono Ctrl+ Cele está ecoando algum rastreamento de pilha de exceção do python. Algo está errado? Como posso consertar isso?

Por exemplo, quando digito "sdf", não faz nada. "sdf" não é um comando válido.

Quando insiro um comando inválido, o terminal não faz nada.

Mas quando pressiono Ctrl+ C, ele imprime esse rastreamento de pilha de exceção python.

Quando pressiono ctr-C, ele está ecoando alguma pilha de exceções python

O rastreamento de pilha é sempre diferente.

Estou usando o Ubuntu 14.04, então python2 é o padrão

$ type python python2 python3
python is /usr/bin/python
python2 is /usr/bin/python2
python3 is hashed (/usr/bin/python3)
$ readlink /usr/bin/python /usr/bin/python2 /usr/bin/python3
python2.7
python2.7
python3.4
$ python --version
Python 2.7.6
$ python3 --version
Python 2.7.6
$ readlink /usr/bin/python3.4
$ 
  • sudo apt-get install --reinstall pythonnão ajudou.
  • sudo apt-get install --reinstall python3lançou um erro

Atualizar:
Então, depois de tentar várias abordagens, acabei reinstalando o Ubuntu. Seguirresposta de wjandreae os comentários parecem estar certos na identificação do problema.

Responder1

/etc/bash.bashrcdefine uma função command_not_found_handle, que chama /usr/lib/command-not-found, que é um script Python 3. Este manipulador é chamado para comandos que o Bash não consegue encontrar.

Então, como correção do curativo, você pode desarmar o manipulador:

unset -f command_not_found_handle

Atualização 2:

Após alguma discussão com o OP, descobriu-se que o problema é causado por um executável do Python 2.7 colocado acidentalmente em /usr/bin/python3.4. (Então minha primeira atualização não foi muito útil, mas está emrevisão 4se você quiser ler). Se isso acontecer com você,não reinicie seu computador! Algumas partes da GUI dependem do Python 3. Provavelmente você também precisará manter o terminal aberto.

Aliás, isso explica o loop infinito ao chamar um comando desconhecido no prompt do Bash. /usr/lib/command-not-foundtem esta seção:

if sys.version < '3':
    # We might end up being executed with Python 2 due to an old
    # /etc/bash.bashrc.
    import os
    if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
        os.execvp("python3", [sys.argv[0]] + sys.argv)

O que significa que quando é executado pelo Python 2, ele chama python3, mas como python3na verdade é Python 2, o processo se repete.

Atualização 3:

O OP acabou reinstalando o Ubuntu, mas fiquei curioso, então abri uma VM, causei um problema semelhante (se não o mesmo) e corrigi-o.

  1. Causou o problema

    sudo cp /usr/bin/python2.7 /usr/bin/python3.4
    
  2. Confirmado o problema

    • Correu python3 --version, conseguiuPython 2.7.6
    • Tentei executar sdf, tive que pressionar Ctrl+C para interromper o loop
  3. Corrigido:

    sudo apt-get install --reinstall python3.4-minimal
    

    O pacote python3.4-minimalfornece o próprio executável do Python 3.4. Todos os outros pacotes que verifiquei ( python3, python3.4, python3-minimal) dependem python3.4-minimalpor esse motivo.

(OP e eu tropeçamos nessa solução pela primeira vez. Para obter mais detalhes sobre o que tentei, o que mais errei e como consertei, leiarevisão 9 desta resposta.)

informação relacionada