
Etwas nagt jetzt schon seit einiger Zeit an mir, und ich kann weder in den Manpages noch mit Ihrer „Sei nicht böse“-Suchmaschine eine relevante Antwort finden.
Meine .bashrc hat Folgendes:
shopt -s histappend
HISTSIZE=100
HISTFILESIZE=0 # 200 previous value
Wenn ich HISTFILESIZE auf 0 setze, kann ich bei jedem neuen Termfenster mit einer sauberen Verlaufstabelle beginnen.
Ich finde es praktisch in Verbindung mit der Verwendung einer Eingabeaufforderung, die enthält \#
, denn wenn man einen vorherigen Befehl visualisiert, bevor man ihn mit !n
oder wieder aufruft !-p
, kann man einfach Folgendes tun:
$ history | more
um den entsprechenden "n"-Wert anzuzeigen
In meinem Fall normalerweise das Ergebnis von:
$ \history | tail -1 | awk '{print $1}' # (I know this is an overkill, don't flame me)
entspricht dem erweiterten Wert von # in PS1 minus 1, so wie ich es immer haben möchte. Aber manchmal auch nicht. Manchmal „läuft“ der erweiterte Wert von # sozusagen weg. Er wird so erhöht, dass er > wird als
$(( $(\history | tail -1 | awk '{print $1}')+1 ))
Hat irgendjemand irgendwelche Hinweise?
Antwort1
Der wahrscheinlichste Grund hierfür ist, dass Sie HISTCONTROL
einen Wert eingestellt haben, der enthält ignoredupes
. Testen Sie dies, indem Sie
echo $HISTCONTROL
Wenn das Ergebnis so etwas wie ist ignoredups
, bedeutet das, dass doppelte Befehle nicht in Ihrem Verlauf gespeichert werden. SieSindjedoch nach PS1 gezählt \#
. Das bedeutet, dass \#
jedes Mal, wenn Sie denselben Befehl zweimal ausführen, fröhlich erhöht wird, aber Ihr history
wird nicht erhöht und dies führt zu der von Ihnen beobachteten Diskrepanz.
Entfernen Sie also entweder das ignoredupes
von HISTCONTROL
(dies wird normalerweise in Ihrem festgelegt, ~/.profile
kann aber auch in festgelegt werden ~/.bashrc
) oder verwenden Sie\!
statt \#
in PS1
.