Wie speichere ich den Shell-Verlauf von Emacs und verwende ihn im Terminal?

2

Ich benutze Emacs für fast alles, aber wenn ich Shell M-x shellstarte und dann Emacs beende, wird der Verlauf nicht gespeichert. Ich habe es (savehist-mode 1)zu diesem Zweck versucht, aber es scheint nicht zu funktionieren. Gibt es eine Möglichkeit, den Verlauf der zu speichern? Befehle in Emacs verwendet und verwenden, wenn ich Shell außerhalb von Emacs verwenden?

poz2k4444
quelle
In meinen Versuchen stelle ich fest, dass Befehle, die im Shell-Modus ausgeführt werden ~/.bash_history, wie bashin einem gewöhnlichen Terminal-Emulator gespeichert werden . Ich bin mir nicht sicher, warum Sie ein anderes Verhalten sehen würden. Welche Shell laufen Sie und wie ist sie in Bezug auf die Geschichte konfiguriert?
Aaron Miller
@AaronMiller Ich bin nicht sicher , wie Sie Ihre Fragen zu beantworten, wie ich in mir sagte, ich tippe einfach M-x shellund wenn ich den Puffer töten sie nicht die Geschichte speichern, ich der einzige Versuch tat , war, legte (savehist-mode 1)in .emacsDatei aber immer noch kann ich nicht Siehe die Befehle in emacs
poz2k4444
1
savehist-modeGilt standardmäßig nur für die Minipuffereingabe und ist daher hier nicht anwendbar (obwohl Sie es allgemein nützlich finden könnten). Höchstwahrscheinlich ist dies Ihre Anmeldeshell bash, und ich habe häufig festgestellt, dass der Verlauf standardmäßig basherst gespeichert wird, wenn der Prozess ordnungsgemäß beendet wird, dh beim Abmelden. Dies geschieht nicht, wenn Sie den Shell-Puffer mit C-x koder ähnlichem beenden. In diesem Fall wird der Shell-Prozess beendet und nicht automatisch beendet. Wenn Sie das gerade tun, versuchen Sie es mit logoutoder exitin Ihrem Shell-Puffer, bevor Sie den Puffer löschen, und prüfen Sie, ob der Verlauf gespeichert wird.
Aaron Miller
(Sie können Ihre Login-Shell ps -p $$über die Befehlszeile bestimmen . Der Wert unter 'CMD' in der Ausgabe ist der von Ihnen verwendete Shell-Wert. Höchstwahrscheinlich ist dies der Fall bash. Wenn dies nicht der Fall ist, fügen Sie einen Kommentar hinzu, um anzugeben, um was es sich handelt und vielleicht kann Ihnen jemand von dort aus bashweiterhelfen - ich benutze nur mich selbst, kann also nicht viel helfen, wenn Sie etwas anderes verwenden.)
Aaron Miller
1
@ AaronMiller Ja, es ist bash, und ja, ich habe genau das getan, was du gesagt hast. Die Shell wurde beendet und der Verlauf wurde gespeichert. Das wusste ich nicht. Bitte poste es als Antwort. Danke im Voraus!
poz2k4444

Antworten:

5

savehist-modetrifft hier nicht zu; Der Grund für dieses Problem ist, dass Bash standardmäßig nur dann in die Verlaufsdatei schreibt, wenn der speicherinterne Verlaufspuffer voll ist oder beim Beenden. Letzteres nur, wenn er ordnungsgemäß beendet wird - das ist ein Bash Ein Prozess, der nicht beendet, sondern beendet wird, schreibt niemals die letzten Befehle in die Verlaufsdatei.

Um das Problem zu umgehen, stellen Sie sicher, dass Sie Ihre Shell-Sitzung immer sauber beenden , indem Sie die Shell-Puffer ausführen logoutoder an der Eingabeaufforderung exiteingeben C-d, bevor Sie sie löschen. Dies gibt Bash die Möglichkeit, die Verlaufsdatei vor dem Beenden zu schreiben.

In den häufig gestellten Fragen zu Bash zur Verwaltung von Verlaufsdateien finden Sie auch einige Vorschläge, wie Bash jeden Befehl in den Verlauf schreiben kann, sobald er ausgeführt wird. Sobald Sie damit fertig sind, müssen Sie sich nicht mehr darum kümmern, sich von Ihren Muscheln abzumelden, bevor Sie deren Puffer töten, sondern können dies C-x kmit wilder Hingabe tun.

Aaron Miller
quelle
1
Wie in den Bash-FAQ vorgeschlagen, hat das Setzen von PROMPT_COMMAND = "history -a" in meiner .bashrc-Datei für mich gut funktioniert, danke.
Wytten