"welches" Programm erfordert eine Shell-Aktualisierung, um neu installierte Programme anzuzeigen?

1349
Jason R. Mick

Warum muss das Linux-Programm whichdie Shell aktualisieren (z. B. tcshdas Terminal eingeben), um in Ihrem Pfad installierte neue Programme anzuzeigen?

Ich war verblüfft, warum ich nicht auf ein Programm zugreifen konnte, das die gleichen Berechtigungen wie andere Programme hatte usr/local/binund das whicheindeutig sehen konnte.

Kann mir jemand erklären, wie das in Laienbedingungen funktioniert?

3

2 Antworten auf die Frage

6
RedGrittyBrick

Versuchen rehash

man tcsh sagt

 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. 

In Laien ausgedrückt: tcsh möchte eine flinke Antwort geben, also baut es eine interne Tabelle (vermutlich eine Hash-Tabelle) mit Befehlen und wo diese zu finden sind. Vermutlich geschieht dies beim Start. Leider hat es keinen Mechanismus zu bemerken, wenn Sie oder ein Administrator etwas tun, bei dem die Aktualisierung der Tabelle erforderlich wäre.

Dies ist einer von vielen Gründen, warum ich ksh oder bash den csh-Derivaten bevorzuge.

Muss man dies jedes Mal tun, wenn ein neues Programm zB über den Paketmanager installiert wird? Daniel Andersson vor 12 Jahren 1
@DanielAndersson: Fast sicher, wenn Sie tcsh verwenden. RedGrittyBrick vor 12 Jahren 2
\ * shivers \ * :-) Daniel Andersson vor 12 Jahren 0
Normalerweise verwende ich Bash, deshalb habe ich das vielleicht noch nie bemerkt ... anscheinend war tcsh meine Standard-Shell für die Abkürzung für den Aktien-Terminal in CentOS 6.2 (oder zumindest die Version, die ich hatte). :) Jason R. Mick vor 12 Jahren 0
@DanielAndersson Dies sollte nicht erforderlich sein, wenn ein neuer Befehl installiert wird, der zuvor nicht vorhanden war. Michael Mior vor 9 Jahren 0
0
Daniel Andersson
$ 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 $ 

Es ist keine Shellaktualisierung mit Bash erforderlich, daher ist es nicht auf sich whichselbst bezogen. Es müssen andere Variablen im Spiel sein.

Anscheinend funktioniert tcsh anders (siehe oben) ... Jason R. Mick vor 12 Jahren 0