No importa cuánto establezca que la HISTSIZEvariable de entorno sea mayor que 5000, cuando imprimo la lista de historial con el historyincorporado, imprime solo los últimos 5000 comandos. Lo necesito porque a menudo tengo un tamaño grande .bash_historyque 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 grepen 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=999configurado.bashrc, y una línea de 6000.bash_historyque 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_historyconstruyó 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.bashrcen la pregunta.history | wc -l, ¿cuántas líneas se muestran?Respuestas:
Este es el código real que carga el historial (de
bashhist.calrededor de la línea 260):Si se establecen los valores de
HISTSIZEyHISTFILESIZE, 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 ,
readlinefue de hecho el culpable. Estaba mirando (bastante tontamente) los parámetros funcionales:fuente
history-sizeera 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
HISTFILESIZEyHISTSIZE.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=1000yHISTFILESIZE=2000en mi inventario~/.bashrc, ¡aunque anulé esos vars más adelante en el mismo archivo!fuente
Cambiar estas líneas lo
~/.bashrcarregló 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