35

Я регулярно запускаю несколько сеансов screen на своих рабочих столах и серверах Linux.

Проблема в том , что , когда я grep через мою историю команды, я нахожу , что я выдал команду в другой сессии, и должен отсоединиться и повторно приложить , чтобы получить эту историю пункта.

Можно ли принудительно заставить по-разному обновленные истории из нескольких сеансов перейти в центральную историю?

3 ответа3

41

Есть две вещи, которые вам нужно сделать:

  1. Вставьте команду shopt -s histappend в ваш .bashrc . Это добавит к файлу истории вместо того, чтобы перезаписать его.
  2. Также в вашем .bashrc вставьте PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n" и файл истории будет перезаписываться и перечитываться каждый раз, когда bash показывает приглашение.

РЕДАКТИРОВАТЬ: Спасибо e-t172 за history -n трюк

10

Пожалуйста, не используйте history -a; history -n , она не работает так, как вы ожидаете, и у вас останется много дублирующих, неупорядоченных команд в вашей истории. Решение, которое в целом работает, как и ожидалось, следующее:

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Использование новой строки вместо точки с запятой также является коротким способом решения проблемы отсутствия / дублирования точки с запятой в PROMPT_COMMAND.

-1

PROMPT_COMMAND не определен по умолчанию в некоторых дистрибутивах. Например, это определено в Arch, но не в Debian.

В моем Dropbox есть bashrc, который я использую во время скачки дистрибутива, и он включает в себя:

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .