Ich habe .bash_history gelöscht, jetzt wird der Verlauf nicht mehr gespeichert (obwohl ich ihn neu erstellt habe)

Ich habe gerade eine neue Kopie von El Capitan installiert. Ich habe versehentlich .bash_history gelöscht, also habe ich es gerade noch einmal gemacht touch .bash_history, in der Hoffnung, dass dies das Problem lösen würde, dass mein Bash-Verlauf beim Schließen und erneuten Öffnen des Terminals nicht gespeichert wird.

Aber das tat es nicht. Und ich habe keine Ahnung warum.

Macbuech:~ josh$ ~/.bash_history
-bash: /Users/josh/.bash_history: Permission denied
Macbuech:~ josh$ ls ~/.bash_history
/Users/josh/.bash_history
Macbuech:~ josh$ echo $HISTSIZE
500
Macbuech:~ josh$ echo $HISTFILESIZE
500
Macbuech:~ josh$ echo $HISTFILE
/Users/josh/.bash_sessions/9817540A-F021-4E1A-93A1-B322BC4738AB.historynew
Macbuech:~ josh$ echo $HISTTIMEFORMAT

Ich habe ein bisschen herumgespielt, .bash_profileum einige Farben zum Laufen zu bringen, gemäß diesem Artikel :

export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
alias ls='ls -GFh'

Ich habe das ganze Zeug wieder entfernt, um sicherzustellen, dass das Problem nicht dort liegt. Also hier ist meine .bash_profile:

[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

Diese Seite gibt an, dass es möglicherweise ein Problem mit RVM gibt, und ich habe versucht, ein .bash_logoutwith hinzuzufügen shell_session_update, aber ohne Erfolg.

Jede Hilfe wird sehr geschätzt.

Hier ist mein komplettes Env:

Macbuech:~ josh$ env
rvm_bin_path=/Users/josh/.rvm/bin
TERM_PROGRAM=Apple_Terminal
GEM_HOME=/Users/josh/.rvm/gems/ruby-2.2.4
SHELL=/bin/bash
TERM=xterm-256color
IRBRC=/Users/josh/.rvm/rubies/ruby-2.2.4/.irbrc
TMPDIR=/var/folders/sq/92dr708946s01kttg916m6xm0000gn/T/
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.9AJd6SsR1y/Render
TERM_PROGRAM_VERSION=361.1
MY_RUBY_HOME=/Users/josh/.rvm/rubies/ruby-2.2.4
TERM_SESSION_ID=9817540A-F021-4E1A-93A1-B322BC4738AB
rvm_stored_umask=0022
USER=josh
_system_type=Darwin
rvm_path=/Users/josh/.rvm
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.gZZeyimp2O/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
rvm_prefix=/Users/josh
PATH=/Users/josh/.rvm/gems/ruby-2.2.4/bin:/Users/josh/.rvm/gems/ruby-2.2.4@global/bin:/Users/josh/.rvm/rubies/ruby-2.2.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/josh/.rvm/bin
rvm_loaded_flag=1
PWD=/Users/josh
_system_arch=x86_64
XPC_FLAGS=0x0
_system_version=10.11
XPC_SERVICE_NAME=0
rvm_version=1.26.11 (master)
SHLVL=1
HOME=/Users/josh
LOGNAME=josh
GEM_PATH=/Users/josh/.rvm/gems/ruby-2.2.4:/Users/josh/.rvm/gems/ruby-2.2.4@global
LC_CTYPE=UTF-8
RUBY_VERSION=ruby-2.2.4
rvm_user_install_flag=1
_system_name=OSX
_=/usr/bin/env
Wofür ist die Ausgabe ls -la ~/.bash_history? Vielleicht ist es ein Berechtigungsproblem? Hier ist meins:-rw------- 1 myusername staff 10852 18 gru 20:41 /Users/myusername/.bash_history
$ ls -la ~/.bash_history -rw-r--r-- 1 josh staff 3B Dec 31 08:38 /Users/josh/.bash_history
Haben Sie die Shell (oder das Terminal selbst) neu gestartet, nachdem Sie .bash_history berührt haben?
Sicher habe ich das getan.
Könnten Sie Ihre vorübergehend entfernen ~/.bash_profile, eine neue Login-Shell starten, prüfen, ob Sie das gleiche Problem haben, dies in Ihrer OQ melden.

Antworten (2)

Ich bin auf das gleiche Problem gestoßen, nachdem ich freiwillig die Datei .bash_history gelöscht hatte.

Die einfache Lösung besteht darin, die Datei nicht nur zu berühren, sondern auch Text hinzuzufügen - ein oder mehrere Zeilenvorschübe reichen nicht aus:

echo "exit" >> ~/.bash_history

Beenden Sie dann das Terminal vollständig und öffnen Sie es erneut. Wenn Sie Ihre gesamte Arbeit in allen Terminalsitzungen gespeichert haben, können Sie dies auch einfach tun

killall Terminal

Aktualisieren:

Ich habe versucht, Ihre Umgebung in einer 10.11-VM zu replizieren, und es ist tatsächlich ein Problem mit RVM: Das Auskommentieren aller rvm-bezogenen Zeilen in .profile und .bash_profile aktiviert erneut Aktualisierungen der .bash_history-Datei.

Die Dateimethode .bash_logout (mit dem Inhalt shell_session_update ) scheint hier jedoch zuverlässig zu funktionieren. Denken Sie nur daran, immer einzugeben exit, bevor Sie ein Terminal-Fenster schließen oder Terminal beenden. Ohne Eingabe exitwird der Verlauf nicht aktualisiert.

Und jetzt die naheliegende Frage: Warum? Benötigt die Datei ein Zeilenumbruchzeichen oder nur ein beliebiges Zeichen?
Scheint bei mir nicht zu funktionieren. Ich habe ein paar Zeilen in meinem Verlauf, aber es werden keine neuen Einträge hinzugefügt.
ls und exit, ohne neue Zeile am Ende:ls\nexit
Funktioniert immer noch nicht.
Wie kann dies geschehen, das Deaktivieren des .bash_profile?
@JoshuaMuheim in etwas anderes umbenennen mv ~/.bash_profile ~/off.bash_profileund Terminal neu starten (oder killall Terminal)
aaah, ich kann mir vorstellen, was passiert ist - wenn Sie das Terminal öffnen und Ihre Login-Shell bash ist, öffnet bash die Datei .bash_history. Dies öffnet intern einen Dateideskriptor, der auf die Datei mit einem Inode zeigt. Die Datei wird von allen Bash-Shells parallel verwendet. Wenn Sie jetzt die Datei in einer Bash-Sitzung von der Befehlszeile löschen und neu erstellen, ist der Dateideskriptor von Bash immer noch geöffnet. Aber jetzt gibt es eine neue History-Datei mit einem anderen Inode. bash will immer noch in den alten Dateideskriptor schreiben, der auf den alten Inode zeigt, und kann es nicht. Zusätzlich wird die Datei im Append-Modus per Bash geöffnet.
Garex, das klingt interessant. Wie kann das gelöst werden?
Danke für dein Update, Klanomath. Ich konnte das Problem reproduzieren: Beim Auskommentieren des RVM-Zeugs scheint der Verlauf wie erwartet zu funktionieren. Das ist ziemlich ärgerlich ... Aber ich werde dafür eine neue Frage erstellen.
@JoshuaMuheim Eingabe exitvor dem Verlassen/Schließen des Terminals/Terminalfensters hilft nicht? In meiner VM habe ich die gleiche envAusgabe wie bei Ihnen erhalten (außer dass meine Ruby-Version etwas älter war) und es hat funktioniert.
Ich habe das RVM-Zeug wieder aktiviert und überraschenderweise scheint der Verlauf immer noch zu funktionieren! Vielleicht hat das Auskommentieren von RVM das Zeug vorübergehend behoben?

Sie müssen die Datei mit "nano" neu erstellen, nein mit "touch". Führen Sie diesen Befehl auf dem Terminal in Ihrem Home-Ordner (/Users/Your-Username) aus:

nano .bash_history

Geben Sie etwas in die Datei ein (sonst wird sie nicht erstellt), beenden und speichern Sie.

Ich hoffe das hilft.

Wie unterscheidet sich diese von der bereits gegebenen Antwort?
Erhalten Sie das erwartete Ergebnis in einer vereinfachten Form, es ist der einzige Unterschied @patrix . Grüße.
Ändert auch nichts. Liegt es vielleicht daran, dass ich verschiedene Terminalfenster geöffnet habe, von denen jedes ein paar Registerkarten hat?
@JoshuaMuheim Das verursacht es wahrscheinlich, konnte aber nicht sicher sein, ich habe die Funktionsweise des ".bash_history"-Verhaltens in osx "El Captain" nicht im Detail studiert. Was ich mit Sicherheit sagen kann, ist, dass jede Terminalsitzung in osx Änderungen an der Datei „.bash_history“ speichert, bis Sie das Fenster schließen oder den Ausgabebefehl „exit“ ausführen. Die Datei wird nicht gesperrt, während die Sitzung aktiv ist.