何らかの理由で、再起動後にシステムにBASH履歴を保持させることができません。ここに私の関連セクションがあります~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
私が知る限り、これらはすべて必要なオプションです(過去にこれらのすべてがなくても、複数の再起動にわたって履歴を保持できることがわかっていました)。ただし、これらのオプションを数回再起動する前に追加したにもかかわらず、再起動後に履歴のほとんどが失われます。空ではありませんが、再起動する前に持っていた9999行はありません。
誰かが文句を言う前に、はい、私はこれらの質問を読みました。上記のリストのいくつかの提案を実装しましたが、残りは役に立たないか関連性がありませんでした。
- histappend使用時のbash履歴の損失
- Bashが履歴を変更するのを防ぐ方法は?
- bash historyコマンドに表示される内容を決定するものは何ですか?
- セッション間でbash履歴を保持するにはどうすればよいですか?
- bashの履歴を定期的に保存する
そこに他の関連コマンドがある可能性がありますので、~/.bashrc
ここで私の全体を見ることができます。
だから、私は何が欠けていますか?履歴が保存されないのはなぜですか?別のファイルが関連していると思われる場合はお知らせください。投稿します。私は実行して確認しgrep -i hist \.*
、私の中に$HOME
のみ関連することを示している.
ファイルが文字列を含むhist
か、HIST
でした.bashrc
。
Linux Mint Debian Edition、GNU bash、バージョン4.2.36(1)-release(x86_64-pc-linux-gnu)を実行しており、私のお気に入りのターミナルエミュレーター(関連する場合)はterminator
です。
更新:
コメントでの@mpyの提案に従って、デフォルトではなく~/.bashrc
set に変更HISTFILE=~/bash_history
しました。これにより、対話型シェルの~/.bash_history
問題が解決されるようです。ログインシェルは同じ動作を表示しますが、履歴は行で切り捨てられます。ただし、関連するファイルには関連する変数は設定されていません。500
HIST
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
それでは、なぜ設定されるHISTSIZE
とHISTFILESIZE
で~/.bashrc
、私は明示的に設定しない限り、十分ではない$HISTFILE
、デフォルト以外のものに~/.bash_history
?
history
コマンドを実行すると、表示される出力cat .bash_history
は、行番号以外は実行中の表示と同じになりますか?つまり、history
コマンドはタイムスタンプやその他の情報をリストしますか?私が尋ねる理由は、これらの難解なものを見た場合、それは別のモジュール/機能/プログラムがあり、それがシェルの歴史とそれが何であれ間違っているかバグのあるバージョンを混乱させていることを意味します。
;)
:別のファイルをデフォルトではなくHISTFILEとして試してください~/.bash_history
。非常に構成された説明:bashがデフォルトのシェルであると仮定するため、システム起動時に非対話型シェルがXセッションの親になります(Xを使用すると仮定します)。これはhistappendオプションについて何も知りません(.bashrcは、その限り、この親シェルの実行のすべてが正常であるが、終了時(つまりシステム停止が)それが優先されます)インタラクティブシェルによって読み取ら~/.bash_history
...あなたの歴史まで(デフォルト)と台無し