Обработка истории Bash с несколькими терминалами

Я использую главным образом Терминатора, и он обычно открывается с 3 разделенными окнами терминала. Я также использую терминал Gnome по различным причинам.
Я задаюсь вопросом, как история удара обрабатывается в этом случае, поскольку я иногда пропускаю ранее данные команды, когда я работаю history

Например, моя подсказка показывает текущую строку истории удара (\!) и если я запускаю Терминатора с 3 разделенными окнами терминала, я получаю ту же строку истории (скажем, 100) на всех терминалах. Какая история будет сохранена?

Также запуская Терминал Gnome после использования Терминатора я получаю строку 100 при запуске независимо все команды, данные прежде в Терминаторе

110
задан 19 July 2018 в 08:10

4 ответа

Сессия удара, которая сохраняется, является той для терминала, который закрывается последнее. Если Вы хотите сохранить команды для каждой сессии, Вы могли бы использовать прием, объясненный здесь.

export PROMPT_COMMAND='history -a'

Заключить страницу справочника в кавычки: “Если установлено, значение выполняется как команда до издания каждой основной подсказки”.

Так каждый раз, когда моя команда закончилась, она добавляет незаписанный объект истории к ~/.bash_history прежде, чем отобразить подсказку (только $PS1) снова.

Таким образом, после вставления той строки /etc/bash.bashrc Я не должен заново изобретать колеса или терять ценные секунды, перепечатывая материал просто, потому что я был ленив со своими терминалами.

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

См. также:

108
ответ дан 22 November 2019 в 23:00

После нескольких чтений man bash, Я использую отдельные файлы истории для каждой оболочки. Я сделал a mkdir -m 0700 ~/.history затем добавленный

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$(date +%y%b%d-%H%M%S).$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

к моему ~/.bashrc. Время от времени я не забываю du -sk .history и вычистите его. Хорошо иметь каждую команду, которую я ввел сохраненный для меня.

Я просто использовал вышеупомянутое для наблюдения то, что я делал в последнее время:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
или
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(для включения 1-го аргумента, например. sudo mount в цепочке вида).

33
ответ дан 22 November 2019 в 23:00

Показать history от всех терминалов:

Добавить export PROMPT_COMMAND='history -a; history -r' в Ваш .bashrc файл.

Источник: http://northernmost.org/blog/flush-bash_history-after-each-command


8
ответ дан 22 November 2019 в 23:00

См. также "остающуюся персистентную историю в ударе" для другой альтернативы. Это подстраивает Вашу подсказку для отправки всех команд, когда-либо введенных в любой терминал в "персистентную историю" файл (вместе с тем, что обычно делается для постоянного клиента .history).

6
ответ дан 22 November 2019 в 23:00

Другие вопросы по тегам:

Похожие вопросы: