Bardzo lubię korzystać control+rz rekurencyjnego przeszukiwania historii poleceń. Znalazłem kilka dobrych opcji, z którymi lubię się z tym korzystać:
# 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
Jedynym problemem dla mnie jest to, że erasedupsusuwa tylko sekwencyjne duplikaty - dzięki czemu za pomocą tego ciągu poleceń:
ls
cd ~
ls
lsKomenda faktycznie będą rejestrowane dwukrotnie. Myślałem o okresowym uruchamianiu w / cron:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Pozwoliłoby to na usunięcie duplikatów, ale niestety kolejność nie zostałaby zachowana. Jeśli nie sortnajpierw plik, nie sądzę, że uniqmoże działać poprawnie.
Jak mogę usunąć duplikaty z mojej historii .bash, zachowując porządek?
Dodatkowy kredyt:
Czy są jakieś problemy z nadpisaniem .bash_historypliku za pomocą skryptu? Na przykład, jeśli usuniesz plik dziennika Apache, myślę, że musisz wysłać sygnał nohup / reset, killaby umożliwić mu opróżnienie połączenia z plikiem. Jeśli tak jest w przypadku .bash_historypliku, być może mógłbym w jakiś sposób pssprawdzić i upewnić się, że nie ma połączonych sesji przed uruchomieniem skryptu filtrującego?
historypolecenia. Gdzie powinienem szukać?
ignoredupszamiast tegoerasedupsi zobacz, jak to działa dla Ciebie.