Por que o executável “errado” está sendo executado? [duplicado]

1

Estou tentando executar o ipython do bash (versão 4.4.19 ) linha de comando .

Como desenvolvedor de Python, tenho várias instalações de ipython em várias versões em vários caminhos de virtualenv s e, portanto, é importante saber qual delas estou executando. Portanto, o $PATH é sempre alterado quando eu altero virtualenv , e esse seria um valor típico para PATH :

$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin

O detalhe importante é que a primeira entrada é " /Users/jab/.virtualenvs/tools/bin " e que o arquivo /Users/jab/.virtualenvs/tools/bin/ipython existe:

$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython

Como esperado, which diz que esse arquivo será executado como o comando " $ ipython "

$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython

$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python

No entanto, esse não é realmente o caso e /usr/local/bin/ipython é executado em vez disso

$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3

Alguém pode explicar por que bash está ignorando meu $PATH e usando o executável "errado"? E o que eu preciso mudar (em my bashrc , ou no meu sistema ( macOS 10.12.3 )) para que os executáveis sejam escolhidos por bash na ordem determinada pelo meu $PATH .

Observação: isso não é uma duplicação O Bash não está encontrando um programa, mesmo que esteja no meu caminho , porque ele pergunta como o PATH trabalha para encontrar qualquer programa, enquanto esta pergunta não é por que o errado programa é encontrado.

    
por jalanb 11.05.2018 / 18:12

1 resposta

6

Parece que em algum momento anterior na sua sessão bash, o executável "errado" é chamado de então seu nome de caminho é lembrado pelo Bash (isso é normal, esse recurso impede mais PATH de pesquisas para comandos já conhecidos).

Para corrigir isso, você deve executar

$ hash -d ipython

Isso limpa o local lembrado de ipython , então o Bash precisa pesquisar PATH novamente para encontrar o comando (e é quando encontra o executável correto).

    
por 11.05.2018 / 18:37

Tags