Problemstellung
Ich habe zahlreiche Beispiele für kreative Dinge mit Bash-Geschichte nach folgenden Gesichtspunkten verfolgt:
# simplified example
PROMPT_COMMAND='history -a; history -c; history -r'
... aber es schien zeitweise zu funktionieren. Wenn die Verlaufsdatei bereits mit dem vorherigen Verlauf vorhanden ist, ist alles in Ordnung.
Andere relevante Informationen
- Bash-Versionen: 3.2.51, 4.1.2 und 4.2.45
- 4.2.x scheint dieses Problem nicht zu haben, es handelt sich jedoch um eine nicht standardmäßige Installation
- Betriebssystem: Linux & amp; Solaris
- Ausgangsverzeichnis ist NFS-gemountet
Diagnoseschritte
Ich habe meine los .bashrc
&Ampere; setze meine .bash_profile
zu:
HISTFILE=$HOME/.bash_history.test
Ich würde dann eine Login-Shell starten (zB ssh zu einem anderen Rechner) & amp; mach so etwas wie das folgende:
~ cat .bash_history.test
cat: .bash_history.test: No such file or directory
~ history
1 cat .bash_history.test
2 history
~ history -a
~ !-3
cat .bash_history.test
cat: .bash_history.test: No such file or directory
Die Verlaufsdatei wird nicht von angehängt history -a
unter folgenden Umständen:
- Die Datei existiert noch nicht
- Die Datei ist leer oder enthält nur Zeilenumbrüche. Sogar mit Leerzeichen wird es funktionieren
... jedoch, wenn die Shell es verlässt tut erstelle es. Danach, history -a
funktioniert wie erwartet ... außer wenn PROMPT_COMMAND="history -a; history -c; history -r"
. Als ich diesen Satz hatte, erzeugte nicht einmal das Verlassen der Shell die Verlaufsdatei (es sei denn, ich lief exec bash
zuerst).
Ich habe es dann mit einer nicht standardmäßigen Installation von bash (4.2.x) versucht und das Problem trat nicht auf.