Cuando ejecuto un programa sin especificar la ruta completa al ejecutable, y Bash debe buscar en los directorios $PATH
para 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 help
en el indicador Bash. Bash localizó el binario /usr/local/bin/svnsync
para "svnsync" y lo ejecutó. Luego, cuando eliminé la instalación de Subversion /usr/local
y 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:
bash
almacena en caché la ruta completa a un comando. Puede verificar que el comando que está intentando ejecutar está en hash con eltype
comando:Para borrar todo el caché:
O solo una entrada:
Para información adicional, consultar
help hash
yman bash
.fuente
csh
, el comando esrehash
.rehash
comando anterior también funciona parazsh
.hash svnsync
.Para borrar solo una entrada, necesita una bandera diferente:
La
-r
bandera 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 +h
oset +o hashall
help set
dice:Puede comprobar que existe un comando que se encuentra en la tabla hash antes de intentar ejecutarlo con
shopt -s checkhash
help shopt
dice:Puede vincular NAME con PATH con
hash -p PATH NAME
oBASH_CMDS[NAME]=PATH
:Magia:
PATH="$PATH"
realizahash -r
De
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