Ich habe die letzte Emacs-Version aus dem Quellcode (v24.2) kompiliert, da die auf meinem Computer installierte Version für mich (ziemlich) alt ist (v21.3). Ich habe das übliche getan:
$configure --prefix=$HOME
make
make install
Jetzt teste ich Emacs und stelle fest, dass die vorherige Version immer noch gestartet wird ... während mein $HOME/bin
Pfad das System überschreiben soll (da er in meiner .bashrc
Datei vor $ PATH steht ).
Mein erster Gedanke war, die which
Befehlsausgabe zu sehen . Und Überraschung, es gibt den Weg zu den neuen Emacs. Ich kann nicht verstehen, wo hier die Diskrepanz ist. In der gleichen Sitzung sind hier die verschiedenen Ausgaben:
$ emacs --version
GNU Emacs 21.3.1
$ `which emacs` --version
GNU Emacs 24.2.1
Ich habe keinen Alias mit Emacs. Überhaupt.
$ alias | grep emacs
$
Irgendeine Idee, was bitte los ist?
Antworten:
Die drei Möglichkeiten, die mir in den Sinn kommen:
emacs
(den Sie überprüft haben)emacs
emacs
Binärdatei befindet sich nicht in der PATH-Hash-Tabelle Ihrer Shell.Sie können überprüfen, ob Sie eine Funktion haben
emacs
:Und entferne es:
Ihre Shell hat auch eine PATH-Hash-Tabelle, die einen Verweis auf jede Binärdatei in Ihrem PATH enthält. Wenn Sie eine neue Binärdatei mit demselben Namen wie eine an anderer Stelle in Ihrem PATH vorhandene Binärdatei hinzufügen, muss die Shell durch Aktualisieren der Hashtabelle informiert werden:
Zusätzliche Erklärung:
which
kennt sich mit Funktionen nicht aus, da es sich nicht um eine eingebaute Bash handelt:Dieses Skript demonstriert das neue Verhalten von binären Hashtabellen.
Obwohl ich es nicht aufgerufen habe,
which cat
würde es immer das erstecat
in meinem PATH zurückgeben, da es nicht die Hash-Tabelle der Shell verwendet.quelle
type
Befehl.hash -r
habe mein Problem behoben.Ja, benutze nicht welche :
PATH
.Dafür gibt es ein eingebautes. Zwei sogar:
type
undcommand
. Der POSIX-Weg:In bash können Sie auch
type -p emacs
nur den Pfad eines externen Befehls anzeigen.Allerdings ist hier
which
eigentlich richtig. Bash speichert Informationen über die Position eines Befehls im Speicher, damit er den Befehl beim nächsten Mal schneller ausführen kann. Sie haben eine neueemacs
ausführbare Datei auf Ihrem installiertPATH
, aber Bash hat immer noch den alten Speicherort im Cache. Führen Siehash emacs
den Befehl aus, umemacs
erneut nachzuschlagen oderhash -r
den Cache zu leeren.quelle
Haben Sie sich abgemeldet und angemeldet, damit Ihre aktualisierte
.bashrc
Anmeldedatei erneut gelesen wird? Wenn nicht, wurde die Umgebung Ihrer aktuellen Sitzung nicht aktualisiert.quelle
`which emacs` --version
wäre , würde das stimmenemacs --version
, dawhich
sein PATH von der aktuellen Shell erbt.