Ich arbeite ja viel mit tmux und öffne dabei mehrere Terminal-Sessions gleichzeitig. Das Problem dabei ist, dass die Bash-History standardmässig nur die Befehle der zuletzt geschlossenen Session speichert. Alle anderen Befehle gehen verloren. Das ist ärgerlich, wenn man später nachvollziehen möchte, was man in welcher Session gemacht hat.
Damit die Befehle verschiedener Terminal-Sessions in der .bash_history gespeichert werden, muss Folgendes entweder in der Benutzer-.bashrc (benutzerspezifisch) oder in der /etc/bash.bashrc (systemweit) eingetragen werden.
# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups
# big big history
export HISTSIZE=100000
export HISTFILESIZE=100000
# append history entries..
shopt -s histappend
# After each command, save and reload history
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Was die Einstellungen bewirken
Die Zeile HISTCONTROL=ignoredups:erasedups sorgt dafür, dass doppelte Einträge vermieden werden. ignoredups ignoriert direkt aufeinanderfolgende Duplikate. erasedups entfernt alle früheren Duplikate, wenn ein Befehl erneut ausgeführt wird.
Mit HISTSIZE und HISTFILESIZE legst du fest, wie viele Befehle im Speicher und in der History-Datei gehalten werden. 100.000 Einträge sind grosszügig bemessen und reichen für die meisten Anwendungsfälle.
Der Befehl shopt -s histappend sorgt dafür, dass neue Einträge an die History-Datei angehängt werden, statt sie zu überschreiben.
Und der PROMPT_COMMAND ist das Herzstück. Nach jedem Befehl wird die History gespeichert, der Speicher geleert und die Datei neu eingelesen. Dadurch sind die Befehle aus allen Sessions sofort verfügbar.
Fazit
Mit diesen Einstellungen gehört der Verlust von Befehlen aus verschiedenen Terminal-Sessions der Vergangenheit an. Besonders bei tmux ist das eine enorme Erleichterung, weil man dort häufig mehrere Sessions parallel laufen hat.
Quellen
Die Bash ist als Open-Source-Software verfügbar.
- Bash: https://www.gnu.org/software/bash/
- Bash-Dokumentation: https://www.gnu.org/software/bash/manual/
- tmux: https://github.com/tmux/tmux