
¿Por qué el programa de Linux which
requiere que actualice el shell (por ejemplo, escriba tcsh
en la terminal) para ver los nuevos programas instalados en su ruta?
Estaba desconcertado por qué no podía acceder a un programa que tenía los mismos permisos que otros programas usr/local/bin
y que which
podía ver claramente.
¿Alguien puede explicarme cómo funciona esto en términos sencillos?
Respuesta1
Intentarrehash
man tcsh
dice
rehash Causes the internal hash table of the contents of the directo-
ries in the path variable to be recomputed. This is needed if
new commands are added to directories in path while you are
logged in. This should be necessary only if you add commands
to one of your own directories, or if a systems programmer
changes the contents of one of the system directories. Also
flushes the cache of home directories built by tilde expansion.
En términos sencillos: tcsh quiere proporcionar una respuesta ágil, por lo que crea una tabla interna (presumiblemente una tabla hash) de comandos y dónde se encuentran. Presumiblemente hace esto al inicio. Desafortunadamente, no tiene ningún mecanismo para notar cuando usted o un administrador hacen algo que requiera actualizar esa tabla.
Esta es una de las muchas razones por las que prefiero ksh o bash a los derivados de csh.
Respuesta2
$ which test
/usr/bin/test
$ ls ~/bin/test
ls: cannot access bin/test: No such file or directory
$ touch ~/bin/test
$ chmod 755 ~/bin/test
$ which test
/home/daniel/bin/test
$
No es necesario actualizar el shell usando Bash, por lo que no está relacionado en which
sí mismo. Debe haber otras variables en juego.