Bash recuerda la ruta incorrecta a un ejecutable que fue movido / eliminado

29

Cuando lo hago

which pip3

yo obtengo

/usr/local/bin/pip3

pero cuando intento ejecutar pip3me sale el siguiente error:

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

Esto se debe a que recientemente eliminé ese archivo. Ahora el whichcomando apunta a otra versión de la pip3que se encuentra /usr/local/binpero el shell aún recuerda la ruta incorrecta. ¿Cómo hago que se olvide de ese camino?

El whichmanual 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.

Ambos /usr/local/biny /usr/binestán en mi PATHvariable, y /usr/local/bin/pip3no es un enlace simbólico, es un ejecutable. Entonces, ¿por qué no se ejecuta?

cara de araña
fuente
¿Cuál es el contenido de /usr/local/bin/pip3?
Thomas
¿Había corrido anteriormente pip3en ese shell mientras estaba dentro /usr/biny luego lo movió?
Eric Renouf
1
¿Qué ves si corres hash -t pip3?
Eric Renouf
1
@Eric Renouf hash -t pip3imprime/usr/bin/pip3
spiderface
2
A menos que tenga una muy buena razón, siempre debe usar typeeather than which. typeestá integrado en un shell posix y le dice lo que hará un shell, en lugar de lo whichque intenta adivinar qué hará el shell.
icarus

Respuestas:

37

Cuando ejecute un comando en bashél, recordará la ubicación de ese ejecutable para que no tenga que buscarlo PATHnuevamente cada vez. Entonces, si ejecuta el ejecutable, luego cambie la ubicación, bashaún intentará usar la ubicación anterior. Debería poder confirmar esto con hash -t pip3lo que mostrará la ubicación anterior.

Si lo ejecuta hash -d pip3, le dirá a bash que olvide la ubicación anterior y debería encontrar la nueva la próxima vez que lo intente.

Eric Renouf
fuente
44
O hash -rpara limpiar toda la mesa.
mattdm
Sí, eso funcionó. Creo que cambiaré el título de la pregunta porque no tiene nada que ver which.
spiderface
1
@spiderface para la mayoría de las funciones de bash es más fácil de usar en helplugar de man, así que aquíhelp hash
Eric Renouf
3
@spiderface type hashle dirá que es un shell incorporado, por lo que no tiene su propia página de manual. En su lugar, use help hasho busque hashen la página de manual de bash.
deltab
1
O, si realmente quieres usar man... ya que hashes un bashincorporado, querrás man bashencontrarlo. Pero lo que dice la página del manual es esencialmente lo help hashque dice bash.
MAPA