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 erasedupsnur sequentielle Duplikate gelöscht werden - so dass mit dieser Befehlsfolge:
ls
cd ~
ls
Der lsBefehl 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 sortdie Datei nicht zuerst bekomme, uniqkann 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_historyDatei ü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_historyDatei der Fall ist , kann ich möglicherweise irgendwie psüberprüfen, ob keine Sitzungen verbunden sind, bevor das Filterskript ausgeführt wird.
historyBefehls nicht finden. Wo soll ich suchen?
ignoredupsstatterasedupsfür eine Weile und sehen Sie, wie das bei Ihnen funktioniert.