Ответы:
Добавьте это к вашему .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сеансы) будут все еще обрезать вашу историю:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Во-вторых, добавьте это в конец вашего .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Примечание: каждая команда пишется сразу после запуска, поэтому, если вы случайно вставите пароль, вы не сможете просто «убить -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 :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Этот ответ удовлетворяет следующим критериям:
отдельная основная история (ни одна сессия не может прервать вашу историю)
автоматическое написание истории (без горячих клавиш)
нечастые записи (не добавляются после каждой команды)
При интерактивном запуске, если $HISTFILESIZEзадано число, bash усекается $HISTFILEдо этого числа. При интерактивном закрытии, если установлена опция оболочки histappend, bash добавляет $HISTSIZEстроки $HISTFILE, в противном случае перезаписывает $HISTFILE.
Каждый раз, когда вкладка создается в Терминале, ~/.bash_profileона читается, что означает, что bash не продолжает читать вашу ~/.bashrc. Добавьте следующую строку в ваш ~/etc/bash_profile:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
Если вы используете экран, ваш файл конфигурации ~ / .screenrc. Если вы хотите, чтобы экран записывал историю, вам просто нужно настроить ее на использование оболочки входа в систему, которая будет исходить из ваших файлов запуска bash (и записывать вашу историю).
# use bash, make it a login shell
defshell -bash
Другая концепция (может быть неприменима), но вы можете иметь unlimitedисторию при использовании shell-sink .