Es macht mir wirklich Spaß control+r
, rekursiv in meinem Befehlsverlauf zu suchen. Ich habe ein paar gute Optionen gefunden, die ich gerne damit verwende:
# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace
# keep the last 5000 entries
export HISTSIZE=5000
# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend
Das einzige Problem für mich ist, dass erasedups
nur sequentielle Duplikate gelöscht werden - so dass mit dieser Befehlsfolge:
ls
cd ~
ls
Der ls
Befehl wird tatsächlich zweimal aufgezeichnet. Ich habe darüber nachgedacht, regelmäßig mit cron zu laufen:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Dies würde das Entfernen der Duplikate erreichen, aber leider würde die Reihenfolge nicht beibehalten. Wenn ich sort
die Datei nicht zuerst bekomme, uniq
kann sie meiner Meinung nach nicht richtig funktionieren.
Wie kann ich Duplikate in meiner .bash_history entfernen, wobei die Reihenfolge erhalten bleibt?
Zusätzliches Guthaben:
Gibt es Probleme beim Überschreiben der .bash_history
Datei über ein Skript? Wenn Sie beispielsweise eine Apache-Protokolldatei entfernen kill
, müssen Sie meines Erachtens ein Nohup / Reset-Signal mit senden, damit die Verbindung zur Datei wiederhergestellt wird. Wenn dies bei der .bash_history
Datei der Fall ist , kann ich möglicherweise irgendwie ps
überprüfen, ob keine Sitzungen verbunden sind, bevor das Filterskript ausgeführt wird.
history
Befehls nicht finden. Wo soll ich suchen?
ignoredups
statterasedups
für eine Weile und sehen Sie, wie das bei Ihnen funktioniert.