Warum wird der Bash-Verlauf auf meinem Mac nicht gespeichert?

28

Ich habe Bash immer für die Arbeit benutzt und hatte nie Probleme damit. Jetzt wird kein Befehl mehr im Verlauf gespeichert. Wenn ich ein Fensterterminal öffne, versuche ich einige Befehle, es sieht so aus, als ob alles gut funktioniert hätte, und zeige mir den Verlauf mit den Pfeiltasten. Aber wenn ich das Fenster schließe (und es die Zeit ist, in der es in der .bash_history-Datei gespeichert werden soll) und ein anderes öffne, gibt es keine Anzeichen für die letzten Befehle.

Wie kann ich herausfinden, was falsch läuft? Oder setzen Sie alles von leer.

abaini01
quelle
Könnte Ihr Profil oder Ihre RC-Datei sein. Was ist in ihnen?
user14492
1
Was sind die Berechtigungen und Eigentümer für Ihre .bash_history? Meine sind 600 und gehören mir. Was ist auch in $ HIST_FILE?
Blm
@blm Berechtigungen sind richtig; $ HIST_FILE drucken Ich habe von .bash_sessions erfahren . Anscheinend gibt es Probleme, wenn das Betriebssystem diese Dateien am Ende einer Sitzung in der Verlaufsdatei speichert. Ich möchte nicht mehr nachforschen, also habe ich dies einfach in mein Haus gestellt .bash_sessions_disableund weiß, dass es zum Standardverhalten zurückkehrt
abaini01
Bitte denken Sie daran, einen Fehlerbericht bei Apple einzureichen: developer.apple.com/bug-reporting
Chris Page

Antworten:

30

Ich tat dies:

Fügen Sie der .bash_profileDatei eine Variable hinzu

SHELL_SESSION_HISTORY=0

Starten Sie das Terminal neu und danach funktioniert es wie gewünscht. (Die Befehle wurden gespeichert, nachdem ich das Terminal geschlossen habe.)

PS Ich benutze auch die HISTFILESIZEund HISTSIZEVariablen

HISTSIZE ist die Anzahl der Zeilen oder Befehle, die in einer Verlaufsliste gespeichert werden, während Ihre Bash-Sitzung läuft.

HISTFILESIZE ist die Anzahl der Zeilen oder Befehle, die (a) zum Startzeitpunkt einer Sitzung in der Verlaufsdatei zulässig sind und (b) am Ende Ihrer Bash-Sitzung in der Verlaufsdatei gespeichert werden, um in zukünftigen Sitzungen verwendet zu werden.

Sysqa
quelle
3
Das Hinzufügen dieser einen Zeile funktioniert für mich auf El Capitan, danke.
Aidan
2
Vielen Dank! Ich würde gerne wissen, warum dies auch funktioniert, wenn jemand es zufällig weiß. (History = 0 würde für meinen unwissenden Verstand bedeuten, dass die gesamte Geschichte verloren sein wird, aber es scheint den gegenteiligen Effekt zu haben.)
Mike Williamson
@ Sysqa Gibt es eine "in der Mitte" -Lösung? Die Funktion "Speichern und Wiederherstellen des Bash-Befehlsverlaufs unabhängig für jede wiederhergestellte Terminalsitzung" scheint eine nette Funktion zu sein, von der einige Programme profitieren könnten. Gibt es eine Möglichkeit, die Vorteile der vorherigen Konfiguration und auch der neuen Konfiguration zu nutzen?
loco.loop
8

Ab OS X 10.11 El Capitan wird das vom System installierte Skript /etc/bashrc_Apple_Terminalmit Terminal koordiniert, um separate Befehlsverläufe für jedes für Resume wiederhergestellte Terminal zu speichern / wiederherzustellen .

In den Kommentaren finden Sie /etc/bashrc_Apple_TerminalErklärungen zur Verwaltung und Anpassung der Befehlsverläufe pro Terminal.

Wenn Sie eine Anpassung vornehmen, PROMPT_COMMANDmüssen Sie sicherstellen, dass die Verknüpfung mit dem vorherigen Wert erfolgt, damit der vom System bereitgestellte Befehl nicht gelöscht wird:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Wenn Sie einen EXITSignal-Handler installieren, stellen Sie trapsicher, dass Sie etwas Ähnliches tun (oder rufen Sie shell_session_update von Ihrem Handler aus auf, wenn Sie nicht herausfinden können, wie die Verkettung mit dem vorherigen Wert erfolgen soll - dies ist ein wenig umständlich).

Wenn Sie die Shell verlassen, werden mit diesem Code neue Befehle im Protokoll des Terminals in gespeichert ~/.bash_sessions. Um festzustellen, ob Probleme auftreten, beenden Sie die Shell manuell mit exit(oder Control-D) , anstatt das Terminal zu schließen . Es protokolliert Statusmeldungen. Beachten Sie, wenn der Vorgang nicht abgeschlossen ist oder eine Art Warn- oder Fehlermeldung angezeigt wird.

In der Regel bashrc_Apple_Terminalauf die Versuche zu erkennen und deaktivieren pro Sitzung Geschichte , wenn es der Benutzer sieht aus wie alle Anpassungen durchgeführt hat , die mit ihm nicht kompatibel sind. Es hört sich so an, als hättest du eines gefunden, das es nicht handhabt. Bitte denken Sie daran, einen Fehlerbericht bei Apple einzureichen : https://developer.apple.com/bug-reporting/

Chris Page
quelle
Ich habe keine spezielle Konfiguration vorgenommen, also ist es wohl nicht das Problem. Könnten Sie erklären, was der PROMPT_COMMAND macht.
loco.loop
@ loco.loop Meinst du "Wofür ist Bashs PROMPT_COMMAND-Variable?" oder "Wofür wird /etc/bashrc_Apple_TerminalPROMPT_COMMAND verwendet?"? Im letzteren Fall verweise ich auf den Code, der ausführlich dokumentiert ist. Oder Sie sollten ein weiteres Q & A darüber starten.
Chris Seite
Ich meine, was PROMPT_COMMAND für ... @ChrisPage
loco.loop
@ loco.loop Ich verweise Sie auf die Bash-Dokumentation oder schlage vor, dass Sie eine Frage und Antwort dazu starten.
Chris Seite
6

Nur für den Fall gibt es andere gibt , die RVM (Ruby - Version Manager) installiert haben: Überprüfen Sie , ob Sie die folgende Zeile in Ihrem haben ~/.profile, ~/.bashrcoder ~/.bash_profileDateien.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Es ist wahrscheinlich RVM, das verhindert, dass der Exit "hook" für bash_sessions ausgeführt wird.

Das war das Problem für mich. Versuchen Sie es auskommentieren.

Quelle: Reddit

Nate
quelle
3

Bei einer Neuinstallation von Mac OS X (aktualisiert auf 10.13.6) wurde der Bash-Befehlsverlauf nicht gespeichert. Es gab auch keine .bashrc- oder .bash_profile-Dateien. In diesem Fall wurde das Problem durch Hinzufügen einer leeren .bashrc-Datei behoben.

touch .bashrc

Das scheint alles zu sein, was du brauchst ...

Vesal
quelle
scheint das Problem auch auf Mojave /
10.14
3

Ich hatte das selbe problem mit einem neu installierten osx mojave. Ich überprüfte meine ~/.bash_historyAkte und sah dieses:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Das Problem wurde durch einfaches Zurückschieben auf Gilm behoben. Ich benutzte:

sudo chown gilm /Users/gilm/.bash_history

und das löste mein problem.

Gilm
quelle
2

Sie können auch eine .bash_logoutDatei mit folgenden Elementen erstellen :

shell_session_update

Von GitHub Kommentar bezogen

Jäger
quelle
Oder geben Sie es trap shell_session_update EXITeinmal manuell ein und melden Sie sich ab. Es gibt Hinweise im /etc/bashrc_Apple_TerminalSkript, die zu langweilig sind, um sie hier aufzunehmen.
MarkHu