Есть ли способ определить неограниченную историю в Bash?
83
Добавьте это к вашему .bashrc
(Linux) или .bash_profile
(MacOS):
export HISTFILESIZE=
export HISTSIZE=
Вот и все, неограниченная история. На данный момент у меня 27000 записей :)
От man bash
:
Если
HISTFILESIZE
не установлено, усечение не выполняется.
Это означает, .bash_history
что никогда не усекается
HISTSIZE
То же самое относится и к , хотя я не смог найти это документально.
Еще одна полезная функция, которую я собираюсь попробовать, это:
Если
HISTTIMEFORMAT
переменная установлена, отметки времени записываются в файл истории, отмеченные символом комментария истории, поэтому они могут сохраняться в сеансах оболочки, как показано ниже:
export HISTTIMEFORMAT="%F %T "
Дайте мне знать, если вы уже попробовали это ...
gdb
; если вы установитеHISTSIZE
переменную, она будет восприниматься как 0, что полностью отключит размер истории.export
,HISTFILESIZE
это количество строк (не байтов), и усечение файла истории происходит при установке переменнойHISTFILESIZE
(и при выходе из оболочки). Так что не устанавливайте его дважды в вашем конфигурационном файле с другими значениями ...(репост моего ответа с https://stackoverflow.com/a/19533853/128597 )
После многих больших, уродливых итераций и странных крайних случаев за эти годы у меня теперь есть краткий раздел моего .bashrc, посвященный этому.
Во-первых, вы должны закомментировать или удалить этот раздел вашего .bashrc (по умолчанию для Ubuntu). Если вы этого не сделаете, то определенные среды (например, запущенные
screen
сеансы) будут все еще обрезать вашу историю:Во-вторых, добавьте это в конец вашего .bashrc:
Примечание: каждая команда пишется сразу после запуска, поэтому, если вы случайно вставите пароль, вы не сможете просто «убить -9 %%», чтобы избежать записи в историю, вам придется удалить его вручную.
Также обратите внимание, что каждый сеанс bash будет загружать полный файл истории в память, но даже если ваш файл истории увеличивается до 10 МБ (что займет много времени), вы не заметите большого влияния на время запуска bash.
источник
HISTFILESIZE
, поэтому вы должны удалить любой случай такого события, кроме того, который вы хотите. Он также будет усечен при выходе из оболочки (но это ожидается). И тебе не нужноexport
.bash --norc
снова усечет историю.export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
чтобы хранить историю оболочки отдельно для каждой сессии (на основе имени хоста и имени tty). Конечно, я должен сначала создать каталог ~ / hist.PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
Включить в ~ / .bashrc :
Этот ответ удовлетворяет следующим критериям:
отдельная основная история (ни одна сессия не может прервать вашу историю)
автоматическое написание истории (без горячих клавиш)
нечастые записи (не добавляются после каждой команды)
фон
При интерактивном запуске, если
$HISTFILESIZE
задано число, bash усекается$HISTFILE
до этого числа. При интерактивном закрытии, если установлена опция оболочкиhistappend
, bash добавляет$HISTSIZE
строки$HISTFILE
, в противном случае перезаписывает$HISTFILE
.советы для OSX (Терминал)
Каждый раз, когда вкладка создается в Терминале,
~/.bash_profile
она читается, что означает, что bash не продолжает читать вашу~/.bashrc
. Добавьте следующую строку в ваш~/etc/bash_profile
:советы по экрану
Если вы используете экран, ваш файл конфигурации ~ / .screenrc. Если вы хотите, чтобы экран записывал историю, вам просто нужно настроить ее на использование оболочки входа в систему, которая будет исходить из ваших файлов запуска bash (и записывать вашу историю).
источник
Другая концепция (может быть неприменима), но вы можете иметь
unlimited
историю при использовании shell-sink .источник