Wenn ich emacs 24.5.2 mit emacs -Q
und starte M-x eshell
, dann starte :
$ which rm
eshell/rm is a compiled Lisp function in `em-unix.el'
Ich bekomme die Eshell-Version. Aber wenn ich C-h v eshell-prefer-lisp-functions
sehe, ist der Wert gleich Null. In der Dokumentation heißt es jedoch:
Wenn Sie lieber die integrierten Befehle als die externen Befehle verwenden möchten, setzen Sie die eshell-prepare-lisp-Funktionen auf t.
Ist das ein Fehler? Ich dachte, die Dokumente könnten rückwärts sein, also habe ich versucht, die Variable auf zu setzen t
, aber das Verhalten bleibt gleich. Ich erhalte weiterhin die eshell-Implementierung und nicht die Version in / bin.
which
. Wenn jarm --version
, was bekommen Sie?$ *rm filename
. Beim Starten*
wird dieeshell
Suche nach integrierten Befehlen übersprungen. Diese Methode ist nützlich, um integrierte Befehle zu umgehen, unabhängig von den bevorzugten Einstellungen.Antworten:
Eshell bevorzugt immer Lisp-Funktionen.
eshell-prefer-lisp-functions
beeinflusst nur die Interpretation von*rm
, nicht die Interpretation vonrm
.Quelle: der Quellcode… Aus Emacs 24.3:
eshell-find-alias-function
sucht eine Funktion unter demeshell/
Präfix. Es gibt eine ähnliche Logikeshell/which
.Die Dokumentation der Variablen ist geradezu irreführend, und das Handbuch ist auch ziemlich irreführend. Ich denke, das Verhalten ist beabsichtigt (warum sollten Sie eine Eshell-Funktion definieren, wenn sie nicht verwendet werden soll?), Es handelt sich also um einen Dokumentationsfehler.
Um das externe Dienstprogramm aufzurufen, rufen Sie
/bin/rm
an oder rufen Sie an , sofern Sie deneshell-prefer-lisp-functions
Wert auf Null gesetzt haben*rm*
. Wenn Sierm
immer das externe Dienstprogramm aufrufen möchten , können Sie einen Alias definieren:alias rm "rm $*"
(danke GDP2 ).quelle
rm
den externen Befehl immer aufzurufen, besteht darin, sicherzustellen, dass keine Funktion aufgerufen wirdeshell/rm
. (Dies oder natürlich das Empfehlen oder Neudefinieren eines Teils von Eshells Code.)" Dies ist nicht die einzige Möglichkeit,rm
den externen Befehl aufzurufen. Wie im Handbuch dokumentiert, könnten Sie einen Alias machen , die Punkterm
zu*rm
(siehe auch emacs.stackexchange.com/a/880/10761 ).