
Por que o programa Linux which
exige que você atualize o shell (por exemplo, digite tcsh
no terminal) para ver os novos programas instalados em seu caminho?
Fiquei perplexo porque não consegui acessar um programa que tinha as mesmas permissões de outros programas no usr/local/bin
, que which
podia ver claramente.
Alguém pode explicar como isso funciona para mim em termos leigos?
Responder1
Tentarrehash
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: o tcsh deseja fornecer uma resposta rápida, por isso constrói uma tabela interna (presumivelmente uma tabela hash) de comandos e onde eles podem ser encontrados. Presumivelmente, isso acontece na inicialização. Infelizmente, ele não possui nenhum mecanismo para perceber quando você ou um administrador fazem algo que precisaria que a tabela fosse atualizada.
Esta é uma das muitas razões pelas quais prefiro ksh ou bash aos derivados csh.
Responder2
$ 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, portanto, não está relacionado por which
si só. Deve haver outras variáveis em jogo.