L'eseguibile CLI "python" sembra ignorare la gerarchia dei percorsi

1

Ho la seguente strana situazione sul mio (appena installato El Capitan, altrimenti vuoto) Mac.

Ho notato che /usr/bin/python defaults su python 2.7 (ancora), e il nuovo sistema di sicurezza SIP "mi protegge" dal rimpiazzarlo con un link simbolico per puntare a python3 (che ho installato in /usr/local/bin ). Ho notato che /usr/local/bin si presenta per primo sul percorso:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Quindi ho pensato benissimo, aggiungo semplicemente un link simbolico in /usr/local/bin chiamato python e lo indirizza a python3.

$ ls -al /usr/local/bin
...
lrwxr-xr-x   ... python -> /usr/local/bin/python3
lrwxr-xr-x   ... python3 -> ../Cellar/python3/3.5.0/bin/python3

E questo è riflesso da which

$ which python
/usr/local/bin/python

Ma quando effettivamente lo uso, torna al nativo python2.7

$ python --version
Python 2.7.10

Che cosa dà? OS X armeggia con il mio $PATH e non me lo dice? Quali passi posso fare per assicurarmi di sapere quale comando verrà effettivamente eseguito?

    
posta JeremyKun 31.10.2015 - 22:11
fonte

2 risposte

2

Prova a chiudere la finestra del terminale e a crearne una nuova. La shell in realtà controlla solo dove si trovano i comandi all'avvio, e non controlla di nuovo se pensa di sapere dove si trova il comando. È un aumento di prestazioni negli script, quindi generalmente una buona idea.

    
risposta data 01.11.2015 - 00:00
fonte
2

Se la tua shell è bash, puoi usare% built-in type e hash per manipolare la sua cache di percorsi eseguibili (come mostrato in Come posso cancellare la cache dei percorsi di Bash in file eseguibili? ):

# to clear the whole cache
hash -r

# to only remove one cached command
hash -d python
    
risposta data 22.12.2015 - 18:57
fonte

Leggi altre domande sui tag