/etc/bash.bashrc
define uma função command_not_found_handle
, que chama /usr/lib/command-not-found
, que é um script do Python 3. Esse manipulador é chamado para comandos que o Bash não consegue encontrar.
Então, como uma correção de bandagem, você pode remover o manipulador:
unset -f command_not_found_handle
Atualização 2:
Após alguma discussão com o OP, o problema é causado por um executável do Python 2.7 acidentalmente colocado em /usr/bin/python3.4. (Então, minha primeira atualização não foi muito útil, mas está em revisão 4 se você quiser lê-la). Se isso acontecer com você, não reinicie o computador! Algumas partes da GUI dependem do Python 3. Você provavelmente precisará manter o terminal aberto também.
BTW, isso explica o loop infinito ao chamar um comando desconhecido no prompt do Bash. /usr/lib/command-not-found
tem 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 python3
é realmente o Python 2, o processo é repetido.
Atualização 3:
OP acabou reinstalando o Ubuntu, mas fiquei curioso, então eu abri uma VM, causei um problema semelhante (se não o mesmo problema) e corrigi-lo.
-
Causou o problema
sudo cp /usr/bin/python2.7 /usr/bin/python3.4
-
Confirmado o problema
- Ran
python3 --version
, obtevePython 2.7.6
- Tentei executar
sdf
, tive que pressionar Ctrl + C para parar o loop
- Ran
-
Corrigido:
sudo apt-get install --reinstall python3.4-minimal
O pacote
python3.4-minimal
fornece o próprio executável do Python 3.4. Todos os outros pacotes que eu verifiquei (python3
,python3.4
,python3-minimal
) dependem depython3.4-minimal
por esse motivo.
(OP e eu tropeçamos nesta solução na primeira vez. Para mais detalhes sobre o que eu tentei, o que mais eu estraguei e como consertei, leia revisão 9 desta resposta .)