Я действительно наслаждаюсь control+r
рекурсивным поиском в моей истории команд. Я нашел несколько хороших вариантов, которые мне нравится использовать с ним:
# 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
Единственная проблема для меня состоит в том, что erasedups
стираются только последовательные дубликаты - так что с этой строкой команд:
ls
cd ~
ls
Команда ls
будет записана дважды. Я думал о периодическом запуске w / cron:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Это приведет к удалению дубликатов, но, к сожалению, порядок не будет сохранен. Если я sort
сначала не верну файл, я не верю, что он uniq
может работать должным образом.
Как я могу удалить дубликаты в моем .bash_history, сохраняя порядок?
Дополнительный кредит:
Есть ли проблемы с перезаписью .bash_history
файла через скрипт? Например, если вы удалите файл журнала apache, я думаю, что вам нужно отправить сигнал nohup / reset, kill
чтобы он сбрасывал соединение с файлом. Если это так с .bash_history
файлом, возможно, я мог бы каким-то образом использовать его, ps
чтобы проверить и убедиться в отсутствии подключенных сеансов до запуска сценария фильтрации?
history
команды. Где я должен искать?
ignoredups
вместо того,erasedups
чтобы некоторое время, и посмотрите, как это работает для вас.