„Welches“ Programm erfordert eine Shell-Aktualisierung, um neu installierte Programme anzuzeigen?

„Welches“ Programm erfordert eine Shell-Aktualisierung, um neu installierte Programme anzuzeigen?

Warum whichmüssen Sie beim Linux-Programm die Shell aktualisieren (z. B. etwas tcshin das Terminal eingeben), um die neuen Programme anzuzeigen, die in Ihrem Pfad installiert sind?

Ich war verblüfft, warum ich nicht auf ein Programm zugreifen konnte, das dieselben Berechtigungen wie andere Programme hatte usr/local/bin, was whichdeutlich zu sehen war.

Kann mir jemand in allgemeinverständlicher Sprache erklären, wie das funktioniert?

Antwort1

Versuchenrehash

man tcshsagt

   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.

Einfach ausgedrückt: tcsh möchte eine schnelle Antwort liefern, also erstellt es eine interne Tabelle (vermutlich eine Hash-Tabelle) mit Befehlen und wo diese zu finden sind. Dies geschieht vermutlich beim Start. Leider verfügt es über keinen Mechanismus, um zu erkennen, wenn Sie oder ein Administrator etwas tun, das eine Aktualisierung dieser Tabelle erforderlich machen würde.

Dies ist einer der vielen Gründe, warum ich ksh oder bash csh-Derivaten vorziehe.

Antwort2

$ 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
$

Bei Verwendung von Bash ist keine Shell-Aktualisierung erforderlich, daher besteht kein Zusammenhang which. Es müssen andere Variablen im Spiel sein.

verwandte Informationen