Я использую в основном Terminator, и он обычно открывается с 3-мя оконечными окнами. Я также использую терминал Gnome по разным причинам.
Мне интересно, как обрабатывается история bash в этом случае, когда я иногда пропускаю ранее выполненные командыhistory
Например, мое приглашение показывает текущую строку истории bash ( \!
), и если я запускаю Terminator с 3-мя разделенными окнами терминала, я получаю одинаковую строку истории (скажем, 100) на всех терминалах. Какая история будет сохранена?
Также, запуская Терминал Gnome после использования Terminator, я получаю строку 100 при запуске независимо от всех команд, выполненных ранее в Terminator.
command-line
bash
history
zetah
источник
источник
Ответы:
Сеанс bash, который сохранен, является тем для терминала, который закрыт самым последним. Если вы хотите сохранить команды для каждого сеанса, вы можете использовать прием, описанный здесь .
В любом случае, вам нужно учесть, что команды из разных сессий будут смешиваться в вашем файле истории, поэтому позже будет не так просто прочитать его.
Смотрите также:
источник
export PROMPT_COMMAND='history -a; history -r'
и я получил некоторые странные номера строки истории в терминале - после выдачи некоторого числа строк истории команд скачки на 2000 вместо 1, что странно, но ведет себя как сказано - вся история терминала сохраняется.export
не нуженПосле нескольких чтений
man bash
я использую отдельные файлы истории для каждой оболочки. Яmkdir -m 0700 ~/.history
тогда добавилк моему
~/.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
в цепочку сортировки).источник
HISTFILESIZE
дважды?man bash
.Ctrl+r
работать снова?egrep 'whatever' .history/*
(илиcat .history/* | egrep 'whatever'
) и использую Ctrl-r для поиска в истории отдельной сессии. Читайтеman bash-builtins
об истории команды. Мойsort .history/* | uniq -c | sort -n | wc -l
показывает 16033 уникальных команд,cut '-d ' -f1 .history/* | sort | uniq -c | sort -n
показывает 2004 уникальных команд, в основном опечатки. Загрузка всего этого в «список истории» bash не поможет.Показать
history
со всех терминалов:Добавьте
export PROMPT_COMMAND='history -a; history -r'
в ваш файл .bashrc.Источник: http://northernmost.org/blog/flush-bash_history-after-each-command
источник
history --merge
. Я использую это в течение года или около того сейчас, и это решает проблему. Когда я хочу получить самую свежую историю из других сессий, я просто запускаю эту команду, и она доступна мне мгновенно.Смотрите также « Хранение постоянной истории в Bash » для другой альтернативы. Это настраивает ваш запрос на отправку всех команд, когда-либо набранных в любом терминале, в файл «постоянной истории» (наряду с тем, что обычно делается для обычного
.history
).источник
echo $$ $date_part "$command_part" >> ~/.persistent_history
Это ставит префиксы в записи с PID их процесса bash, чтобы мы могли распутать несколько историй.