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


33

私のbashの履歴は不思議なことに動作を停止し、それを修正する方法がわかりません。これは私の.bashrcのようです:

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

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

私は.bash_historyファイルの所有者であるため、この問題をどのように修正するかについてはあまりわかりません。

ありがとう!


こんにちはネルソン、スーパーユーザーへようこそ。挿入されたスペースを簡単に確認しますか?
ベルティエブ

はい、そうでした。削除して報告します。

@bertieb、スペースを削除し、$ HISTFILESIZEが適切にエコーされました。ただし、履歴は保存されないままで、$ HISTFILEはその奇妙な一時履歴ファイルを出力します(これは、そのセッションだけの履歴を保存すると仮定しています)。

$HISTFILE興味がないので、変更しようとしていますか?私は.bashrcOSXを持っていませんが、echo $HISTFILE期待する場所を報告します-問題の行をコメントアウトすると効果がありますか?
ベルティエブ

1
常にパス名変数の展開を引用してください:HISTFILE="$HOME/.bash_history”。引用符がないと、ホームディレクトリへのパスにスペース(またはその他の特殊文字)が含まれている場合、バージョンが無効になります。
クリスページ

回答:


26

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

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

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

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

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

export SHELL_SESSION_HISTORY=0

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

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

~/.bash_sessions_disable

AppleはEl Capitanがリリースされてからすでにいくつかの動作を変更しているため、ここで詳細を読むことをお勧めします less /private/etc/bashrc_Apple_Terminal


3
ただし、保存/復元メカニズムを無効にすることから始めないでください。シェルコマンドの履歴に問題がある場合は、その問題を解決してください。この~/.bash_sessions_disableファイルは、具体的に解決できない問題がある場合の最後の手段です。セッションごとのコマンド履歴だけでなく、セッションごとのコマンド履歴だけを無効にすることができます。詳細については、コメント/etc/bashrc_Apple_Terminalを参照してください。
クリスページ

1
@ChrisPage実際に、Appleはいくつかのスクリプトを変更しました。回答を更新しました、ありがとう。
15

@diimdeepこの行をどこに追加しますか?export SHELL_SESSION_HISTORY=0
ゼロヘッジ

@zerohedge .bashrcand .bash_profile unix.stackexchange.com/a/310150/15362
diimdeep

@diimdeepありがとうございます。これは今のところ機能しているようです。影響はありますか?
ゼロヘッジ

6

エルキャピタンのアップグレード後に似たようなことに気づきました。ファイル.bash_sessions_disableファイルをホームディレクトリに追加するだけで、新しいbashセッションが無効になり.bash_history、使用中になります。

このRedditスレッドには、詳細とリンクがあります。


ただし、保存/復元メカニズムを無効にすることから始めないでください。シェルコマンドの履歴に問題がある場合は、その問題を解決してください。この~/.bash_sessions_disableファイルは、具体的に解決できない問題がある場合の最後の手段です。セッションごとのコマンド履歴だけでなく、セッションごとのコマンド履歴だけを無効にすることができます。詳細については、コメント/etc/bashrc_Apple_Terminalを参照してください。
クリスページ

おかげでクリス-私の歴史を無効にする他のものは、過去数ヶ月間、期待通りに機能していました(以前のosxバージョンと同じで、Linuxと同じです)。彼らがなぜそれを変えたのか分からないのですか?
16

@rabs SHELL_SESSION_HISTORY=0の先頭に追加することをお勧めし~/.bash_profileます。
ティージェイ

5

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

  echo 'shell_session_update' > $HOME/.bash_logout

詳細については、https://github.com/rvm/rvm/issues/3540を参照してください


1
rvmを変更することなく、素敵な修正。
mlo55

1
Ruby enVironment Manager(RVM)rvm.ioについて話していますか?いつ、なぜそれが関係するようになりますか?
MarkHu

3

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

おそらくRVMが、bash_sessionsを実行するためのexit "hook"を妨げています。.bash_profileの次の行をコメントアウトすると、機能するはずです。

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

これは本当に役に立ちました!
カルステン

1

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


.profileを編集したため、.bashrcと同じになりましたが、まだ履歴が表示されません。

@NelsonLiuの$HISTFILEさまざまな部分にエコーするとどうなりますprofileか?たぶん、変数を変更する別のスクリプトを入手できますか?私は両方を確認TerminalしてiTermbash 3および4 そのデフォルトを持っている両方$HOME/.bash_history
theoden

プロファイルのさまざまな部分で$ HISTFILEをエコーするにはどうすればよいですか?

@NelsonLiu、それは明らかではないですか?あなたの目的は、いつ$HISTFILE変化するかを追跡することです。したがって、echo $HISTFILEコードを2つ囲むだけです。あなたがしなければならないのは、何かが明らかになるまで$HISTFILE両方のecho $HISTFILE行を行ごとに近づけたり近づけたりすることによって変化するコードの断片を見つけることです。それで全部です。
theoden

1
だから私はあなたの指示通りに行い、.bash_profileをprofileと同じにしました。echo $HISTFILE違いがあるかどうかを確認するために、すべての行で決定することにしました。しかし、それは単に/Users/username/.bash_history無数の時間を印刷しました。次にecho $HISTFILE、シェルで実行すると、出力されました/Users/nelsonliu/.bash_sessions/CD275A29-1DF1-4ED8-B8CE-F706B11B812F.historynew

0

High Sierraでこの問題が発生していました。どういうわけか、自分の.bash_historyがrootによって所有され、他のユーザーの読み取り権限さえも持っていませんでした(ホームディレクトリの内容がls -alで表示されたとき)

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

すべて順調


私にとっては、ファイルのアクセス許可ではなく、HIST制御変数を定義していないということでした。明らかに、それらの1つ以上を定義する必要があります。私は自分にこれを追加~/.bash_profileファイル:export HISTTIMEFORMAT='%F %T '
MarkHu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.