2013-02-25 2 views
2

Я часто смотрю в свой файл .bash_history, чтобы узнать, как я запускал программу или какие именно аргументы я использовал. Проблема в том, что моя история кажется очень неполной. Некоторые команды, которые я найду, я провел несколько месяцев назад, другие, которых я побежал вчера, и их нет. Я думаю, что проблема в том, что я много работаю над ssh, и я часто не выхожу из системы чисто, а скорее отключается, когда мой ноутбук спит, или я перехожу к другой сети Wi-Fi. Таким образом, кажется, что bash записывает только в файл истории, когда он выходит. Это правильно? Есть ли способ заставить его написать каждую команду или каждую команду?Как я могу сделать обновление bash_history чаще?

ответ

6

Добавить history -a в ваш PROMPT_COMMAND, чтобы обновить сохраненную историю до каждого приглашения.

PROMPT_COMMAND='history -a' 

Это должно быть в вашем файле .bashrc.

+0

Обратите внимание, что в bash до bash-4.2-alpha была ошибка, которая предотвращала работу этого метода «history -a» (например, если вы начинали с пустой истории $ HISTFILE и 'PROMPT_COMMAND = '-a' ', $ HISTFILE не будет обновляться, как ожидалось). См. [Исходный отчет об ошибках] (http://lists.gnu.org/archive/html/bug-bash/2010-08/msg00071.html). Это было исправлено в bash-4.2-alpha (поиск 'history -a' в [CHANGES] (http://git.savannah.gnu.org/cgit/bash.git/diff/CHANGES?id=495aee441b75276e38c75694ccb455bb6463fdb9) для описание исправления. – troydj

1

Вы можете установить Advanced Shell History, инструмент с открытым исходным кодом, который записывает вашу историю bash или zsh в базу данных sqlite. Это немного более экстремальные, чем просто в том числе history -a в вашем PROMPT_COMMAND, но он также записывает такие вещи, как текущий рабочий каталог, код завершения команды, запуск команды и остановки, начало сеанса и остановки, телетайп и т.д.

Если вы хотите запросить базу данных истории, вы можете зайти так далеко, чтобы писать пользовательские SQL-запросы и сделать их доступными в комплекте ash_query. Есть также несколько полезных предварительно упакованных запросов, но, поскольку я хорошо знаю SQL, я обычно просто открываю базу данных и пишу что-то обычай, когда мне нужно что-то искать.

Одна команда, которую я нахожу очень полезной, однако, смотрит на историю текущего рабочего каталога. Это помогает мне вспомнить, где я остановился, когда работал над чем-то.

[email protected]:~$ ash_query -q CWD 
session 
    when     what 
1 
    2014-08-27 17:13:07 ls -la 
    2014-08-27 17:13:09 cd .ash 
    2014-08-27 17:16:27 ls 
    2014-08-27 17:16:33 rm -rf advanced-shell-history/ 
    2014-08-27 17:16:35 ls 
    2014-08-27 17:16:37 less postinstall.sh 
    2014-08-27 17:16:57 sudo reboot -n 

И та же история с использованием текущего рабочего каталога (и все, что под ним):

[email protected]:~$ ash_query -q RCWD 
session 
    where 
     when     what 
1 
    /home/vagrant/advanced-shell-history 
     2014-08-27 17:11:34 nano ~/.bashrc 
     2014-08-27 17:12:54 source /usr/lib/advanced_shell_history/bash 
     2014-08-27 17:12:57 source /usr/lib/advanced_shell_history/bash 
     2014-08-27 17:13:05 cd 
    /home/vagrant 
     2014-08-27 17:13:07 ls -la 
     2014-08-27 17:13:09 cd .ash 
    /home/vagrant/.ash 
     2014-08-27 17:13:10 ls 
     2014-08-27 17:13:11 ls -l 
     2014-08-27 17:13:16 sqlite3 history.db 
     2014-08-27 17:13:43 ash_query 
     2014-08-27 17:13:50 ash_query -Q 
     2014-08-27 17:13:56 ash_query -q DEMO 
     2014-08-27 17:14:39 ash_query -q ME 
     2014-08-27 17:16:26 cd 
    /home/vagrant 
     2014-08-27 17:16:27 ls 
     2014-08-27 17:16:33 rm -rf advanced-shell-history/ 
     2014-08-27 17:16:35 ls 
     2014-08-27 17:16:37 less postinstall.sh 
     2014-08-27 17:16:57 sudo reboot -n 

FWIW - Я автор и сопровождающий проекта.

0

выполнить следующую comands

  1. экспорта HISTTIMEFORMAT = "% d /% м /% г% T"
  2. shopt -s histappend
  3. PROMPT_COMMAND = "История -a; $ PROMPT_COMMAND "

Примечание- Вы можете добавить эти команды в файл .bash_profile и перезагрузиться для постоянного решения

Смежные вопросы