Відповіді:
Додайте це до свого .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 %%", щоб уникнути написання історії, вам потрібно буде видалити його вручну.
Також зауважте, що кожен баш-сеанс буде завантажувати повний файл історії в пам'ять, але навіть якщо ваш файл історії зросте до 10 Мб (що займе багато часу), ви не помітите особливого впливу на час запуску вашої програми.
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
.
Кожен раз, коли в Terminal створюється вкладка, ~/.bash_profile
читається, що означає, що баш не продовжує читати ваші ~/.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
історію, коли використовуєте раковину .