Ответы:
Добавьте это к вашему .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 .