“which” O programa requer atualização do shell para ver programas recém-instalados?

3

Por que o programa Linux which exige que você atualize o shell (por exemplo, digite tcsh no terminal) para ver novos programas instalados em seu caminho?

Fiquei perplexo porque não consegui acessar um programa, que tinha as mesmas permissões que outros programas em usr/local/bin , que which podia ver claramente.

Alguém pode explicar como isso funciona para mim em termos leigos?

    
por Jason R. Mick 13.04.2012 / 17:01

2 respostas

6

Experimente rehash

man tcsh diz

   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.

Em termos leigos: tcsh quer fornecer uma resposta rápida, por isso cria uma tabela interna (uma tabela de hash presumivelmente) de comandos e onde eles podem ser encontrados. Ele presumivelmente faz isso no arranque. Infelizmente, ele não tem nenhum mecanismo para perceber quando você ou um administrador faz algo que precisaria que a tabela fosse atualizada.

Esta é uma das muitas razões pelas quais eu prefiro ksh ou bash para derivativos csh.

    
por 13.04.2012 / 17:44
0
$ 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
$

Nenhuma atualização de shell é necessária usando o Bash, por isso não está relacionada a which em si. Deve haver outras variáveis em jogo.

    
por 13.04.2012 / 17:08