Bash履歴番号は1から始まらないのですか?

Bash履歴番号は1から始まらないのですか?

bashプロンプト(私はOS X 10.7を使用しています)のカスタマイズ中に奇妙な現象が発生しました。プロンプトに!を追加すると履歴番号が表示されます。ただし、履歴番号は常に1ではなく501から始まります。端末を再起動してもこの現象が発生します。

似たようなものが見つからないようで、あなたが洞察力を提供してくれるかどうか疑問に思います。

答え1

メンズバッシュから:

   On startup, the history is initialized from the file named by the vari‐
   able HISTFILE (default ~/.bash_history).  The file named by  the  value
   of  HISTFILE  is  truncated,  if necessary, to contain no more than the
   number of lines specified by the value of HISTFILESIZE. [...] When an 
   interactive  shell  exits, the last $HISTSIZE lines are copied from the
   history list to $HISTFILE.

テキストは非常に明確ですが、例えば説明します(これはdebシステムですが、bashはbashです)。

私の現在の記録ステータス:

~$ set | grep HIST
HISTCONTROL=ignoredups:ignorespace
HISTFILE=/home/hmontoliu/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000

HISTFILESIZEは2000で、HISTSIZEは1000なので、HISTFILEの最後の1000行しか使用できないため、誤った印象を受ける可能性があります。歴史1000から始めてください。

~$ history | head -1
 1000  if i=1; then echo $i; done

~$ history | wc -l
1000

ただし、実際にはHISTFILEは最後の2000のコマ​​ンドを保存します。

 ~$ wc -l $HISTFILE
2000 /home/hmontoliu/.bash_history

これが迷惑だと思われる場合は、HISTSIZEとHISTFILESIZEのようになります。

~$ echo "export HISTSIZE=$HISTFILESIZE" >> .bashrc
~$ bash -l
~$ history | head -1
    1  ls
~$ history | wc -l
2000
~$ set | grep HIST
HISTCONTROL=ignoredups:ignorespace
HISTFILE=/home/hmontoliu/.bash_history
HISTFILESIZE=2000
HISTSIZE=2000

最後のヒント:走って利用可能でhelp historyあることを確認する必要があります。歴史

答え2

これhmonoliuの答えかなり良いです。これはTL; DRバージョンです。

bashの記録は常に中断した部分から再開されます。ホームディレクトリのファイルに実行コマンドの半永久的な履歴を保持します。 bashシェルを起動するたびに、この履歴ファイルがロードされ、前のセッションで実行されたコマンドまでスクロールできます。履歴に274の古いコマンドがある場合、新しいシェルのコマンド履歴番号は275から始まります。

履歴ファイルは、環境変数で指定された最大長に切り捨てられます$HISTFILESIZE。明らかに、履歴ファイルを最大500行に減らしたので、各新しいシェルは501で始まります。以前の履歴項目は、前のシェルの最後の500項目の集まりです。

答え3

デフォルトでは、履歴はに保存されます~/.bash_history。対話型シェルの履歴は、シェルの設定に従って終了時にファイルに保存されます。 bash(1) マンページを読み、「history」を検索します。

関連情報