Bardzo lubię korzystać control+r
z 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 erasedups
usuwa tylko sekwencyjne duplikaty - dzięki czemu za pomocą tego ciągu poleceń:
ls
cd ~
ls
ls
Komenda 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 sort
najpierw plik, nie sądzę, że uniq
moż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_history
pliku za pomocą skryptu? Na przykład, jeśli usuniesz plik dziennika Apache, myślę, że musisz wysłać sygnał nohup / reset, kill
aby umożliwić mu opróżnienie połączenia z plikiem. Jeśli tak jest w przypadku .bash_history
pliku, być może mógłbym w jakiś sposób ps
sprawdzić i upewnić się, że nie ma połączonych sesji przed uruchomieniem skryptu filtrującego?
history
polecenia. Gdzie powinienem szukać?
ignoredups
zamiast tegoerasedups
i zobacz, jak to działa dla Ciebie.