Независимо от того, насколько я установил HISTSIZE
переменную среды больше 5000, при печати списка истории с помощью history
встроенной функции он печатает только последние 5000 команд. Мне это нужно, потому что у меня часто есть большое значение, .bash_history
которое превышает 5000 строк, а иногда нужно обратиться к ранней команде, нажав Ctrl-R, но если эта команда содержит более 5000 команд ранее, я не могу получить к ней доступ, используя этот механизм. Я знаю, что могу использовать grep
на .bash_history
, но я думаю, что Ctrl-Rмеханизм будет гораздо быстрее (и удобнее). Я использую GNU Bash версии 4.1.
Вот полное содержимое моего файла .bashrc:
#!/bin/bash
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
#HISTCONTROL=ignoredups:ignorespace:erasedups
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=50000
HISTFILESIZE=500000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\ [\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\@-\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
HISTSIZE=9999 HISTFILESIZE=999
установленным параметром.bashrc
и строкой.bash_history
из 6000 строк, которые отображаются в выходных данныхhistory
. Расскажите нам свою версию bash и откуда вы ее взяли, а также полное содержание вашей.bashrc
.HISTFILESIZE=9999
. Он.bash_history
был искусственно создан для теста (я не хотел вводить 6000 команд в командной строке), но bash сохраняет его правильно при выходе. Пожалуйста, скопируйте и вставьте свой полный.bashrc
вопрос.history | wc -l
, сколько строк показано?Ответы:
Это фактический код, который загружает историю (
bashhist.c
около строки 260):Если значения
HISTSIZE
иHISTFILESIZE
заданы, они будут использованы.Readline, библиотека, которая на самом деле обрабатывает ввод / редактирование строк и историю , предлагает средства для определения того, насколько большим может увеличиться буфер истории. Тем не менее, Bash не устанавливает жесткого потолка для этого, где значения большего значения будут игнорироваться, по крайней мере, я мог бы найти.
редактировать
Судя по комментариям ,
readline
действительно был виновником. Я смотрел (довольно глупо) на функциональные параметры:источник
history-size
было что-то, что было передано (из журнала изменений RL) функциям в readline, которые в конечном итоге были вызваны bash. Похоже, мы поняли это вместе.Ваша история усекается при первой установке HISTSIZE, поэтому, если она установлена на 5000 ранее в вашем ~ / .bashrc или в общесистемном bashrc в / etc , вы должны закомментировать их.
источник
Попробуйте оба
HISTFILESIZE
иHISTSIZE
.источник
echo "$HISTSIZE $HISTFILESIZE"
что вы видите?У меня была такая же (или похожая) проблема, но inputrc был в порядке. В моем случае единственное, что сработало, - это комментирование
HISTSIZE=1000
иHISTFILESIZE=2000
на моем складе~/.bashrc
- хотя я переопределял эти переменные позже в том же файле!источник
Изменение этих строк
~/.bashrc
исправило это для меня:После этого сохраните файл и перезагрузите файл bashrc.
источник
Я думаю, что вы можете достичь исторического потолка на вашей ОС для HISTSIZE. На странице руководства для fc / history в Solaris 10 (под управлением KSH):
Это означает, что команда fc может адресовать до 32767 записей в файле истории, что делает ее жестким потолком для количества команд, хранящихся в файле истории. Конечно, YMMV, но я думаю, что вы можете проконсультироваться с вашей документацией по ОС / справочными страницами по этому вопросу. Мой 0.02 ...
источник