No importa cuánto establezca que la HISTSIZE
variable de entorno sea mayor que 5000, cuando imprimo la lista de historial con el history
incorporado, imprime solo los últimos 5000 comandos. Lo necesito porque a menudo tengo un tamaño grande .bash_history
que supera las 5000 líneas, y a veces uno necesita abordar un comando temprano presionando Ctrl-R, pero si ese comando tiene más de 5000 comandos antes, no puedo acceder a él usando ese mecanismo. Sé que puedo utilizar grep
en el .bash_history
, pero creo que el Ctrl-Rmecanismo sería mucho más rápido (y conveniente). Yo uso gnu bash versión 4.1.
Ese es el contenido completo de mi archivo .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
configurado.bashrc
, y una línea de 6000.bash_history
que se muestran en la salida dehistory
. Cuéntanos tu versión de bash y de dónde la obtuviste, y el contenido completo de tu.bashrc
.HISTFILESIZE=9999
. Se.bash_history
construyó artificialmente para la prueba (no quería escribir 6000 comandos en el indicador), pero bash lo guarda correctamente al salir. Por favor, copie y pegue todo.bashrc
en la pregunta.history | wc -l
, ¿cuántas líneas se muestran?Respuestas:
Este es el código real que carga el historial (de
bashhist.c
alrededor de la línea 260):Si se establecen los valores de
HISTSIZE
yHISTFILESIZE
, se utilizarán.Readline, la biblioteca que realmente maneja la edición de entrada / línea y el historial , ofrece facilidades para poner un límite a cuán grande puede crecer el búfer de historial. Sin embargo, Bash no coloca un techo duro en esto donde los valores más grandes serían ignorados, al menos eso podría encontrar.
Editar
De los comentarios ,
readline
fue de hecho el culpable. Estaba mirando (bastante tontamente) los parámetros funcionales:fuente
history-size
era algo que se pasó (del registro de cambios de RL) a las funciones en readline que finalmente fueron llamadas por bash. Parece que lo descubrimos juntos.Su historial se trunca la primera vez que se configura HISTSIZE, por lo que si está configurado en 5000 antes en su ~ / .bashrc, o en el bashrc de todo el sistema en / etc , debe comentarlos.
fuente
Prueba ambos
HISTFILESIZE
yHISTSIZE
.fuente
echo "$HISTSIZE $HISTFILESIZE"
¿qué ve?Tuve el mismo problema (o similar), pero inputrc estaba bien. En mi caso, lo único que funcionó fue comentar
HISTSIZE=1000
yHISTFILESIZE=2000
en mi inventario~/.bashrc
, ¡aunque anulé esos vars más adelante en el mismo archivo!fuente
Cambiar estas líneas lo
~/.bashrc
arregló para mí:Después de eso, guarde el archivo y vuelva a cargar el archivo bashrc
fuente
Creo que puede estar alcanzando un límite histórico en su sistema operativo para HISTSIZE. Desde la página de manual para fc / history en Solaris 10 (ejecutando KSH):
lo que implica que el comando fc puede direccionar hasta 32767 entradas en el archivo de historial, por lo que es un límite máximo para la cantidad de comandos guardados en el archivo de historial. Por supuesto, YMMV, pero creo que puede consultar la documentación de su sistema operativo / páginas de manual sobre este asunto. Mi 0.02 ...
fuente