Cuando ejecuto un programa sin especificar la ruta completa al ejecutable, y Bash debe buscar en los directorios $PATHpara encontrar el binario, parece que Bash recuerda la ruta en algún tipo de caché. Por ejemplo, instalé una compilación de Subversion desde el origen hasta /usr/local, luego escribí svnsync helpen el indicador Bash. Bash localizó el binario /usr/local/bin/svnsyncpara "svnsync" y lo ejecutó. Luego, cuando eliminé la instalación de Subversion /usr/localy volví a ejecutar svnsync help, Bash responde:
bash: /usr/local/bin/svnsync: No such file or directory
Pero, cuando comienzo una nueva instancia de Bash, se encuentra y se ejecuta /usr/bin/svnsync.
¿Cómo borro el caché de rutas a los ejecutables?
bash
executable
cache
Daniel Trebbien
fuente
fuente

Respuestas:
bashalmacena en caché la ruta completa a un comando. Puede verificar que el comando que está intentando ejecutar está en hash con eltypecomando:Para borrar todo el caché:
O solo una entrada:
Para información adicional, consultar
help hashyman bash.fuente
csh, el comando esrehash.rehashcomando anterior también funciona parazsh.hash svnsync.Para borrar solo una entrada, necesita una bandera diferente:
La
-rbandera no toma un parámetro y siempre borrará todo el caché.(Al menos en bash 3.2.39 en Debian Lenny)
fuente
Hay soluciones no mencionadas aquí.
Puede deshabilitar el hash con
set +hoset +o hashallhelp setdice:Puede comprobar que existe un comando que se encuentra en la tabla hash antes de intentar ejecutarlo con
shopt -s checkhashhelp shoptdice:Puede vincular NAME con PATH con
hash -p PATH NAMEoBASH_CMDS[NAME]=PATH:Magia:
PATH="$PATH"realizahash -rDe
variables.c:Tratar:
fuente
Como el usuario johntex ha notado en un comentario a la respuesta del usuario Tobu , la acción práctica más simple en Bash es repetir solo su programa:
Eso es todo.
fuente