Peu importe à quel point j'ai défini la HISTSIZE
variable d'environnement à une valeur supérieure à 5000, lors de l'impression de la liste d'historique avec la fonction history
intégrée, elle n'imprime que les 5000 dernières commandes. J'ai besoin de cela parce que j'ai souvent un grand .bash_history
qui dépasse 5000 lignes, et parfois il faut adresser une commande précoce en appuyant sur Ctrl-R, mais si cette commande est plus de 5000 commandes plus tôt, je ne peux pas y accéder en utilisant ce mécanisme. Je sais que je peux l'utiliser grep
sur le .bash_history
, mais je pense que le Ctrl-Rmécanisme serait beaucoup plus rapide (et pratique). J'utilise gnu bash version 4.1.
C'est le contenu complet de mon fichier .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
installé.bashrc
, et une ligne de 6000 lignes.bash_history
qui apparaissent toutes dans la sortie dehistory
. Dites-nous votre version de bash et d'où vous l'avez obtenue, ainsi que le contenu complet de votre.bashrc
.HISTFILESIZE=9999
. Le a.bash_history
été construit artificiellement pour le test (je ne voulais pas taper 6000 commandes à l'invite), mais bash l'enregistre correctement à la sortie. Veuillez copier-coller votre intégralité.bashrc
dans la question.history | wc -l
, combien de lignes sont affichées?Réponses:
C'est le code réel qui charge l'historique (à partir de la
bashhist.c
ligne 260 environ):Si les valeurs de
HISTSIZE
etHISTFILESIZE
sont définies, elles seront utilisées.Readline, la bibliothèque qui gère effectivement entrée / édition de la ligne et l' histoire ne offrent des installations pour mettre un plafond juste la taille de la mémoire tampon de l' histoire peut se développer. Cependant, Bash ne place pas de plafond rigide sur ce point où des valeurs plus grandes seraient ignorées, du moins que je pourrais trouver.
modifier
D'après les commentaires ,
readline
était en effet le coupable. Je regardais (plutôt bêtement) les paramètres fonctionnels:la source
history-size
c'était quelque chose qui était passé (depuis le changelog RL) aux fonctions de la ligne de lecture qui étaient finalement appelées par bash. On dirait que nous l'avons compris ensemble.Votre historique est tronqué la première fois que HISTSIZE est défini, donc s'il est défini à 5000 plus tôt dans votre ~ / .bashrc, ou dans le bashrc à l'échelle du système dans / etc , vous devez les commenter.
la source
Essayez les deux
HISTFILESIZE
etHISTSIZE
.la source
echo "$HISTSIZE $HISTFILESIZE"
que voyez-vous?J'ai eu le même problème (ou un problème similaire), mais inputrc allait bien. Dans mon cas, la seule chose qui a fonctionné a été de commenter
HISTSIZE=1000
etHISTFILESIZE=2000
dans mon stock~/.bashrc
- même si je remplaçais ces vars plus tard dans le même fichier!la source
La modification de ces lignes l'a
~/.bashrc
corrigé pour moi:Après cela, enregistrez le fichier et rechargez le fichier bashrc
la source
Je pense que vous pourriez atteindre un plafond historique sur votre système d'exploitation pour le HISTSIZE. À partir de la page de manuel de fc / history dans Solaris 10 (exécutant KSH):
ce qui implique que la commande fc peut adresser jusqu'à 32 767 entrées dans le fichier historique, ce qui en fait un plafond difficile pour le nombre de commandes conservées dans le fichier historique. Bien sûr YMMV, mais je pense que vous pouvez consulter la documentation de votre système d'exploitation / pages de manuel à ce sujet. Mon 0,02 ...
la source