web-dev-qa-db-ja.com

Macのターミナルセッション間でBash履歴が保持されない

私のbashの履歴が不思議なことに機能しなくなったので、どうすれば修正できるかわかりません。これは私の.bashrcのようになります:

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history

ただし、echo $HISTFILEを実行すると、/Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynewが出力されます。

私は.bash_historyファイルの所有者なので、この問題をどのように修正すればよいかわかりません。

ありがとう!

34
user477774

端末は各端末セッションに一意の識別子を割り当て、TERM_SESSION_ID環境変数を介してそれを通信します。これにより、端末で実行されているプログラムは、Resumeを有効にして端末を終了および再起動するときに、アプリケーション固有の状態を保存/復元できます。

新しいフォルダー(〜/ .bash_sessions /)は、セッションに固有のHISTFILEおよび.sessionファイルを格納するために使用されます。

シェルの起動中に、セッションファイルが実行されます。古いファイルは定期的に削除されます。

デフォルトの動作では、復元されたターミナルセッションごとに、bashコマンド履歴を個別に保存および復元します。また、新しいセッションのコマンドをグローバル履歴にマージします。

この動作を無効にして、次の設定で単一の履歴を共有できます

export Shell_SESSION_HISTORY=0

HISTTIMEFORMATが定義されている場合、セッションごとの履歴はデフォルトで無効になっています(/ private/etc/bashrc_Apple_Terminalで詳細をご覧ください)

次のファイルが存在する場合、保存/復元メカニズムは無効になります。

~/.bash_sessions_disable

El Capitanのリリース以降、Appleはすでに一部の動作を変更しているため、こちらで詳細を読むことをお勧めしますless /private/etc/bashrc_Apple_Terminal

27
diimdeep

El Capitanのアップグレード後も同様のことがわかりました。 .bash_sessions_disableファイルをホームディレクトリに追加するだけで、新しいbashセッションが無効になり、.bash_historyが再び使用できるようになります。

この Redditスレッド には、より多くの情報とリンクがあります。

6
rabs

RVMの問題を解決するには、最新のRVMバージョンに更新するか、これを実行します。

  echo 'Shell_session_update' > $HOME/.bash_logout

詳細は https://github.com/rvm/rvm/issues/354 を参照してください。

5
Alex Rojo

Redditスレッド からのこの回答は私を救いました:

おそらくRVMが、bash_sessionsを実行するための出口「フック」を妨げているためです。 .bash_profileの次の行をコメント化すると、機能するはずです。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
3
noio

Macの場合、デフォルトのログインシェルはbashであり、.profile の代わりに .bashrc。そのため、間違ったファイルを編集していました。

1
theoden8

私はハイシエラでこの問題を見ていました。どういうわけか、私自身の.bash_historyはrootによって所有され、他のユーザーの読み取り権限さえ持っていませんでした(ls -alでホームディレクトリの内容を表示した場合)

この.bash_historyファイルには何の影響もなかったため、Sudo rm .bash_historyを実行してから、touch .bash_historyを実行して新しいファイルを作成しました。

今はすべて順調に見えます

0
Julian Jordan