woher kommt die diskrepanz zwischen \# in PS1 und n in !n?

woher kommt die diskrepanz zwischen \# in PS1 und n in !n?

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 !noder 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 HISTCONTROLeinen 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 historywird nicht erhöht und dies führt zu der von Ihnen beobachteten Diskrepanz.

Entfernen Sie also entweder das ignoredupesvon HISTCONTROL(dies wird normalerweise in Ihrem festgelegt, ~/.profilekann aber auch in festgelegt werden ~/.bashrc) oder verwenden Sie\!statt \#in PS1.

verwandte Informationen