HISTSIZE
環境変数を5000以上に設定しても、組み込みの印刷履歴リストを使用すると、最後の5000のhistory
コマンドのみが印刷されます。 5000行を超える大きなコマンドがあることが多く、.bash_history
時にはを押して前のコマンドを処理する必要があるため、このコマンドが必要ですCtrl-R。ただし、コマンドが5000行より古い場合は、そのメカニズムを使用してアクセスできません。grep
onを使用できることを知っていますが、このメカニズムがより速くて便利になると.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
答え1
以下は履歴をロードする実際のコードです(bashhist.c
260行目から始まります)。
/* Load the history list from the history file. */
void
load_history ()
{
char *hf;
/* Truncate history file for interactive shells which desire it.
Note that the history file is automatically truncated to the
size of HISTSIZE if the user does not explicitly set the size
differently. */
set_if_not ("HISTSIZE", "500");
sv_histsize ("HISTSIZE");
set_if_not ("HISTFILESIZE", get_string_value ("HISTSIZE"));
sv_histsize ("HISTFILESIZE");
/* Read the history in HISTFILE into the history list. */
hf = get_string_value ("HISTFILE");
if (hf && *hf && file_exists (hf))
{
read_history (hf);
using_history ();
history_lines_in_file = where_history ();
}
}
HISTSIZE
と値が設定されている場合にHISTFILESIZE
使用されます。
実際には、入力/行の編集と履歴を処理するライブラリであるReadlineする履歴バッファーが大きくなる可能性のあるサイズを制限する機能を提供します。しかし、Bashはこれに対してハードキャップを設定せず、少なくとも私が見つけることができるより大きい値は無視されます。
編集する
~からコメント、readline
実際に犯人です。私は関数パラメータを(やや愚かに)見ています。
inputrcファイルから読み取れるHistory-sizeという変数があります。この変数は、履歴リストに保存される履歴項目の最大数を設定します。ローカルinputrcファイルでその値を確認したところ、5000のように見えました。大きな値に設定すると問題が解決しました。
答え2
HISTSIZEを初めて設定すると、記録が切り捨てられます。したがって、以前に〜/.bashrcで5000に設定した場合、または/ etcのシステム全体のbashrcで、コメントアウトする必要があります。
答え3
2つのHISTFILESIZE
合計を試してくださいHISTSIZE
。
答え4
私は同じ(または同様の)問題がありますが、inputrcは問題ありません。私の場合は、コメントをHISTSIZE=1000
付けてHISTFILESIZE=2000
私の在庫に保存するだけでした~/.bashrc
。後で同じファイルでその変数をオーバーライドしても。