Bash ricorda il percorso errato di un eseguibile che è stato spostato / eliminato


29

Quando io faccio

which pip3

ottengo

/usr/local/bin/pip3

ma quando provo ad eseguire, pip3ricevo un errore come segue:

bash: /usr/bin/pip3: No such file or directory

Questo perché di recente ho eliminato quel file. Ora il whichcomando punta a un'altra versione di pip3quello che si trova in /usr/local/binma la shell ricorda ancora il percorso sbagliato. Come faccio a dimenticarlo?

Il whichmanuale dice

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

Entrambi /usr/local/bine /usr/binsono nella mia PATHvariabile, e /usr/local/bin/pip3non è un collegamento simbolico, è un eseguibile. Quindi perché non viene eseguito?


Qual è il contenuto di /usr/local/bin/pip3?
Thomas,

In precedenza avevi eseguito pip3quella shell mentre era dentro /usr/bine poi l' avevi spostata?
Eric Renouf,

1
Cosa vedi se corri hash -t pip3?
Eric Renouf,

1
@Eric Renouf hash -t pip3stampe/usr/bin/pip3
spiderface

2
A meno che tu non abbia una buona ragione, dovresti sempre usare typeeather di which. typeè incorporato in una shell posix e ti dice cosa farà una shell, piuttosto che whichquale tentativo di indovinare cosa farà la shell.
icarus

Risposte:


37

Quando si esegue un comando in bashesso, si ricorderà la posizione dell'eseguibile in modo che non debba cercare di PATHnuovo ogni volta. Quindi, se esegui il file eseguibile, quindi cambi la posizione, bashproverai comunque a utilizzare la vecchia posizione. Dovresti essere in grado di confermare questo con il hash -t pip3quale mostrerà la vecchia posizione.

Se lo esegui hash -d pip3, dirà a bash di dimenticare la vecchia posizione e dovrebbe trovare quella nuova la prossima volta che provi.


4
O hash -rper cancellare l'intero tavolo.
Mattdm,

Sì, ha funzionato. Penso che cambierò il titolo della domanda perché non ha nulla a che fare con which.
spiderface

1
@spiderface per la maggior parte delle funzionalità di bash è più facile da usare al helpposto dell'uomo, quindi quihelp hash
Eric Renouf,

3
@spiderface type hashti dirà che è una shell incorporata, quindi non ha una sua pagina man. Invece, usa help hasho cerca hashnella pagina man di bash.
deltab,

1
Oppure, se vuoi davvero usarlo man... dato che hashè bashincorporato, dovresti man bashtrovarlo. Ma ciò che dice la pagina man è essenzialmente cosa help hashdice bash.
MAP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.