я использую GNU screen
с 5 различными сеансами, в каждом из которых хранится собственная история команд. Но часто я не нахожу команду в истории, хотя уверен, что использовал ее именно в той сессии, в которой сейчас нахожусь, несколько недель назад.
Кажется, есть жесткое ограничение на размер истории? Как я могу установить это на бесконечность?
Связанный вопрос: как я могу контролировать, где хранится история сеанса? Часто наш системный администратор перезагружает компьютер (ы), и я теряю все свои сеансы, и мне приходится делать screen -wipe
потому что сеансы повреждены. Тогда все истории исчезнут. :( Я бы хотел найти сохраненные истории в этом случае и связать их во вновь созданном сеансе.
P.S .: Пользуюсь bash
во всех сеансах экрана.
ОБНОВИТЬ: Я не спрашиваю о том, как объединить истории сеансов. Просто я хочу, чтобы у каждого сеанса была бесконечная история, и я хочу иметь возможность «загружать» эту историю в новый сеанс, если старый будет поврежден или удален.
ОБНОВЛЕНИЕ 2: Вы, наверное, догадались: Когда я сказал я использую GNU screen
с 5 различными сеансами Я действительно имею в виду GNU screen
сеанс с 5 разными окнами в нем. Сожалею.
Вам лучше использовать историю Bash, чем screen. Экран сохраняет буфер прокрутки (вероятно, в памяти, а не в файле). Когда вы вызываете команды, используя Ctrl-а { на самом деле он перебирает все, что появлялось на экране и все еще находится в буфере, и выглядит так, как будто оно следует за символом приглашения. На самом деле нет истории команд. Вы можете увеличить размер буфера обратной прокрутки, используя screen -h num
или defscrollback num
или scrollback num
кстати экранные команды.
Ты можешь использовать Уорренпредлагает обновлять историю Bash. И / или вы можете использовать одну из найденных мной функций регистрации Вот который может сохранить ваш IP-адрес или идентификатор сеанса экрана вместе с датой, временем, текущим рабочим каталогом и фактической командой. Я сам постоянно этим пользуюсь. Возможно, вам придется установить переменную $hcmntextra
, который используется моими функциями, чтобы включить $STY
так что имя сеанса экрана также регистрируется.
Я задал похожий вопрос по SU немного назад: https://superuser.com/questions/37576/can-history-files-be-unified-in-
Процитировать принятые ответ:
вот две вещи, которые вам нужно сделать:
Вставьте команду shopt -s
histappend в вашем .bashrc. Это будет добавлено к файлу истории, а не перезаписано.
Также в вашем .bashrc
, вставить PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
и файл истории будет переписываться и перечитываться каждый раз, когда bash показывает подсказку.
См. Также history
страницы руководства.
Мое предпочтительное решение этой проблемы - это вариант одного из предыдущих ответов.
Мне нравится хранить отдельный файл для каждой комбинации сеанса экрана / окна, и каждый файл добавляется каждый раз, когда отображается соответствующая подсказка:
if [[ "$STY" = "" ]]; then STY="none"; fi
if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi
export HISTFILE=~/.bash_history.$STY.$WINDOW;
PROMPT_COMMAND="$PROMPT_COMMAND; history -a"
Это создает следующие файлы истории:
.bash_history.none.none
.bash_history.2756.pts-9.linux.0
.bash_history.2756.pts-9.linux.1
.bash_history.2881.pts-9.linux.0
Если вы хотите, чтобы окно {x} всегда использовало свой собственный файл истории, но использовало один и тот же файл независимо от сеанса экрана, вы можете просто опустить переменные STY:
if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi
export HISTFILE=~/.bash_history.$WINDOW;
PROMPT_COMMAND="$PROMPT_COMMAND; history -a"
Это создаст следующие файлы истории:
.bash_history.none
.bash_history.0
.bash_history.1
.bash_history.2
История команд для каждого окна находится в памяти для каждого сеанса bash. Вам нужно, чтобы bash записывал в разные файлы истории, чтобы они сохранялись и оставались отдельными, как вы просите.
Вы можете сделать это, установив HISTFILE
за сеанс экрана. Я предполагаю, что это будет примерно так в вашем файле запуска:
if [[ "$WINDOW" != "" ]] ; then export HISTFILE=~/.bash_history.$WINDOW ; fi
Обратите внимание, что это не решает проблему обновления файла истории, когда ваши оболочки завершаются перезагрузкой.