2015-10-06 4 views
4

Если у вас открыто 10 xterms, скажем, можно ли в любом случае найти все истории bash?Можно ли искать все истории bash

я могу сделать

history|grep something 

на каждом из них в отдельности, но я иногда хотел бы избежать этого.

ответ

5

Я собираюсь предположить, что эти окна xterm все для одного и того же пользователя и все находятся на одном хосте. Если они не все одинаковые пользователи, то вы должны изменить их папку с файлами истории, чтобы использовать тот же файл истории. Если вам нужно это сделать, см. Эту тему: https://superuser.com/questions/760830/how-do-i-change-the-bash-history-file-location

Но основная проблема, с которой вы столкнетесь, состоит в том, что bash записывает свою историю только в .bash_history, когда оболочка закрыта. Тем не менее, вы можете редактировать .bashrc написать самую последнюю команду .bash_history immeditately, например, так:

# When the shell exits, append to the history file instead of overwriting i 
shopt -s histappend 

# After each command, append to the history file and reread it 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

Смотрите эту ссылку для получения дополнительной информации: https://unix.stackexchange.com/questions/1288/preserve-bash-history-in-multiple-terminal-windows

+1

Зачем экспортировать? Новоиспеченные оболочки снова будут перечитывать конфигурационные файлы bash, а процессы, которые вы создаете из bash, не должны знать, каковы ваши настройки bash. – PSkocik

+0

Спасибо.Да, все окна xterm для одного и того же пользователя, и все находятся на одном хосте. – eleanora

+0

@PSkocik. Еще раз прочитайте комментарий над командой export. Это не о файлах конфигурации bash, о том, как получить самую последнюю историю. – R4F6

2

Bash имеет в памяти историю и файл истории ($HISTFILE, ~/.bash_history по умолчанию). По умолчанию все ваши сеансы bash совместно используют один файл истории, который получает в истории памяти последней из выходящей оболочки bash всякий раз, когда вызывается оболочка bash.

Вы можете изменить поведение перезапись на добавление с:

shopt -s histappend 

И вы можете вручную вызвать этот сброс с

history -a #-a stands for append 

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

Тогда, когда мне нужна история от других сеансов, я просто загрузить глобальный файл истории в историю в памяти с:

history -r 

-r прочитать файл истории и добавить содержимое в история

руководство команды history может быть прочитан с help history и получения более подробной информации относительно истории в man 1 bash.

Помимо установки shopt -s histappend и добавления history -a к вашему PROMPT_COMMAND, это также полезно установить размеры (HISTFILESIZE, HISTSIZE) в некоторых больших и HISTCONTROL, например, до "ignoreboth:erasedups" для устранения дубликатов.

Кроме того, я нашел Ctrl-R более удобным способом поиска по истории.

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