.bash_history は切り捨てられます。

.bash_history は切り捨てられます。

これを設定しても、.bash_historyはまだ切り捨てられます。

export HISTSIZE=
export HISTFILESIZE=

私の場合は.bash_profileいつ発生するのかわかりませんが、ログアウトしたりコンピュータをシャットダウンしたときに発生しているようです。この問題が発生してからかなり古いので、私に同じ変数を設定してみました/etc/profileが、問題は解決しませんでした。

最大2000行まで上がりますが(切り捨て前に見た最大値である)、時には切れる場合もありますが、後でこれを発見しました。この問題を解決するにはどうすればよいですか?

答え1

.bash_profileBashが次のように起動したときにのみロードされます。ログインシェル。 OSXでは、デフォルトは各端末でログインシェルを起動するので、これは一般的なケースです。ただし、bash入れ子になったシェルを実行している項目を入力したり、screen または tmux を実行したり、対話型シェルを開始する他の項目を入力したりすると、ログインではなく対話型シェルが作成されます。このシェルは読み込みだけで~/.bashrcはありません~/.bash_profileHISTFILESIZE環境にエクスポートされるため、ログインシェルを実行している端末で起動されたプログラムから起動されたシェルはこの設定を継承します。しかし、スタンドアロンの実行シェルはそうではありません。 (これは端末でログインシェルを実行するOSXメソッドの基本的な欠陥です。)したがって、ログインシェルを実行していない端末エミュレータ内または起動されたスクリーンセッションでシェルを実行します。 by cron シェル操作や Aquamacs などに設定 このHISTSIZEデフォルトHISTFILESIZE値が使用されます。

回避策HISTSIZEは、およびをHISTFILESIZE正しい位置(in)に設定することです~/.bashrc

.bashrc奇妙なことに、Bashはログインしていないインタラクティブシェルからのみ読み込みます。すべての対話型シェルでそれを読むには、次の行を次の行に入力します.bash_profile

case $- in *i*) . ~/.bashrc;; esac

答え2

さまざまなシェルにロードされたすべてのファイルを確認する必要があります。私の場合、/etc/bash.bashrcファイルに次の2行が含まれていることがわかりました。

HISTSIZE=1000
HISTFILESIZE=2000

.bashrcでリセットしたので、これがなぜ重要なのか実際には言うことはできませんが、この行をコメントアウトすることですべてがうまく機能するようにしました。

DebianからUbuntuに切り替えた後、この問題が発生し始めました。この行は Debian には存在せず、そこで何の問題も見たことがないことを考慮すると、これが最終的な解決策であると確信しています。

答え3

回答が遅れましたが、一部のディストリビューション(おそらくすべて?)では誰も言及していません。履歴ファイルが切り捨てられました。変数を設定する瞬間(これはメモリ履歴を管理する変数にも当てはまります。).bash_profile(Mac)または.bashrc(他のUnix)に次のコードを追加し、インタラクティブシェルを起動してそのようなbash場合をテストできます。

HISTFILE=~/foo_history
for ((i = 0; i < 100; i++)); do echo >> $HISTFILE; done
echo 'history size' $(wc -l $HISTFILE) # should print 100
HISTFILESIZE=5
echo 'history size' $(wc -l $HISTFILE) # should print 5

これが、いくつかの以前のデフォルトの起動ファイルで設定された変数を変更することがうまくいかない理由です。

関連情報