сохранять историю bash, регулярно

сохранять историю bash, регулярно

Я настроил bash на сохранение истории в файл. Он делает это всякий раз, когда bash завершает работу [правильно]. Поскольку иногда bash не завершает работу должным образом, история теряется.

Итак, вопрос в том, могу ли я настроить bash на более регулярное сохранение истории?


Я использую Debian Gnu (версия 6, Squeeze) с ядром Linux.

версия bash: GNU bash, версия 4.1.5(1)-release (i486-pc-linux-gnu)

решение1

сохраните это в вашем bash_profile или bashrc

shopt -s histappend

PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

решение2

Я решил использовать export PROMPT_COMMAND='history -a'в своем .bash_aliases, который записывает из списка истории в памяти в файл истории при каждом запросе. У меня были некоторые проблемы с дедупликацией, но они были решены. Я также прибегнул к использованию cron.daily и monthly для резервного копирования файла. Если терминал прерывается без выхода, он не будет сохранен. Даже перехват выхода не сработает. К сожалению, задание cron также не может сохранить список истории, который хранится в памяти. Я не смог найти способ отправить команду текущей запущенной оболочке для записи history -wиз списка в файл. Это можно было бы использовать, но для каждой оболочки, открытой на вкладке, пришлось бы сделать отдельную, если бы кто-то хотел разделить работу. Если нет, есть другая ссылка, в которой обсуждается, как писать в каждом запросе, одновременно выполняя дедупликацию.

https://unix.stackexchange.com/questions/697314/any-way-to-resolve-export-prompt-command-history-a-and-histcontrol-ignored/720637#720637

решение3

Возможно, ваш $HISTFILE принадлежит пользователю root. Предполагая, что вы используете bash в качестве оболочки входа. Вот как это проверить:

$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history

Значением по умолчанию для HISTFILE должно быть ~/.bash_history. Если вы видите ошибку «need to set HISTFILE» или если $HISTFILE не равен ~/.bash_history, то вам следует проверить ~/.profile или ~/.bash_profile или ~/.bashrc, чтобы убедиться, что он не устанавливается или не сбрасывается неправильно.

Обычно им владеет только пользователь root, поэтому просто сбросьте его:

$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history

Выйдите из системы, затем войдите снова.

$ history

Должен отображаться последний набор команд, введенных до того, как владельцем файла стал пользователь root, а затем команды, введенные после смены владельца файла.

Связанный контент