Мені дуже подобається використовувати 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
деякий час і подивіться, як це працює для вас.