Gibt es einen Befehl, damit csh alle Verzeichnisse in Ihrem Pfad unter FreeBSD neu liest?

755
Warren P

Ich habe ein seltsames Problem in FreeBSD9 cshals Shell. Neu installierte Programme, die sich in meinem Pfad befinden, werden nur gestartet, wenn ich die cshShell erneut starte. Ich finde das wirklich nervig.

Ich schätze csh, dass Pfade einmal durchsucht werden und sie nicht erneut durchsucht werden, bis Sie sie verlassen. Wie zwingen Sie es, sich selbst zu aktualisieren? Gibt es etwas, das Sie in das Feld einfügen können .cshrc, damit es damit aufhört? (Ich bin es gewohnt zu schlagen, und ich sehe nichts dergleichen in der bash.)

1

2 Antworten auf die Frage

3
Nicole Hamilton

The Unix C shell hashes your search path directories to help it find executables faster. But it develops blind spots if you add new executables to those directories after it's already done its hash. The solution is to use the rehash command to tell it to rebuild its hash. Alternately, you can turn off the path hash entirely (taking a slight performance hit) using the unhash command.

(Fwiw, I agree this is annoying behavior. I use a path hash in my own Hamilton C shell, but mine is smart enough to discover blind spots and repair them automatically.)

Es überrascht mich, dass jede Instanz der Shell einen eigenen Hash hat. Ich denke, dass jede Shell einen anderen Pfad haben könnte, auch wenn dieselbe .cshrc den ursprünglichen Pfad erstellt hat. Ich denke, das ist unvermeidlich. Warren P vor 11 Jahren 0
Der Hash wird von jeder Instanz der C-Shell im Speicher erstellt, während die Pfadverzeichnisse durchsucht werden. Beachten Sie, dass jeder Prozess eine eigene Kopie der Umgebungsvariablen (einschließlich PATH) erhält und diese ändern kann, ohne andere Prozesse zu beeinflussen. Nicole Hamilton vor 11 Jahren 0
Ich erinnere mich, wie ich Anfang der 1990er Jahre einen Artikel über Ihre Shell in DDJ gelesen habe. Ich denke, es war dies hier: http://www.drdobbs.com/cpp/examining-the-hamilton-c-shell/184408480 OS / 2 ... Wow. Erinnerungen Warren P vor 11 Jahren 0
Ja, das ist meine C-Hülle. Ich hatte damals einen anderen Vornamen, aber das bin ich. Wer wusste, dass ich 25 Jahre später immer noch daran arbeite und immer noch neue Features und Support für neue Windows-Versionen hinzufüge. Nicole Hamilton vor 11 Jahren 0
Nett! Ich habe gerade die x64-Demo-Version unter Win8 RTM ausprobiert. Ich bin glücklich zu berichten, dass es gut läuft. Einige Rückmeldungen: Ich vermisse es, im Vergleich zu cygwin in dieser Umgebung "Mann" zu haben. Ich kann in BSD-ähnlichen Shell-Umgebungen ohne Mann nicht weit kommen. Und ssh. Und diese Thermoskanne und dieses Paddelballspiel. Und das ist alles was ich brauche. :-) Warren P vor 11 Jahren 0
Ich bin froh, dass du es genießt. Alle Hilfsprogramme haben Online-Hilfe mit "-h". Wenn Sie noch 'mann' bevorzugen, versuchen Sie `alias man (^! ^!: ^^ -h | mi)`. Sie können auch F1 drücken, um das Hypertext-Benutzerhandbuch in Ihrem Browser zu öffnen. Nicole Hamilton vor 11 Jahren 0
0
N. Ngo

Wenn Sie eine aktuelle Version von tcsh(die ich zurzeit habe tcsh 6.20.00 (Astron) 2016-11-24) verwenden, können Sie set autorehash(z. B. in Ihrer ~/.cshrcoder at-Eingabeaufforderung) das automatische Durchsuchen von "path" -Verzeichnissen aktivieren, wenn dies erforderlich ist (wie bash). Per tcsh-Manpage:

 autorehash (+) If set, the internal hash table of the contents of the directories in the path variable will be recomputed if a command is not found in the hash table.  In addition, the list of available commands will be rebuilt for each command completion or spelling correction attempt if set to `complete' or `correct'  respectively; if set to `always', this will be done for both cases. 

Es gibt jedoch einige Randfälle, wie im rehashBefehlsabschnitt der Manpage von tcsh angegeben:

rehash Causes the internal hash table of the contents of the directories in the path variable to be recomputed. ... With autorehash, a new command will be found automatically, except in the special case where another command of the same name which is located in a different directory already exists in the hash table. Also flushes the cache of home directories built by tilde expansion.