Macのbash履歴が保存されないのはなぜですか?


28

私はいつもbashを仕事に使ってきましたが、それでも問題はなかったです。現在、コマンドは履歴に再び保存されません。ウィンドウターミナルを開いていくつかのコマンドを試すと、すべてが正常に機能し、矢印キーを使用して履歴を表示するように動作します。しかし、ウィンドウを閉じて(そして.bash_historyファイルに保存することになっている)、別のウィンドウを開いた場合、最後のコマンドの兆候はありません。

何が間違っているのかを知るにはどうすればよいですか?または、すべてを空白から再設定します。


プロファイルまたはrcファイルである可能性があります。それらには何がありますか?
user14492

1
.bash_historyの権限と所有者は何ですか?私のものは600で、私が所有しています。また、$ HIST_FILEには何が含まれていますか?
blm

@blm権限は正しいです。.bash_sessionsについてわかった$ HIST_FILEを出力します。セッションの終了時に、OSがそれらのファイルを履歴ファイルに保存するときに問題があるようです。私は単に私の自宅でこれを入れているので、私はもう調査したくない.bash_sessions_disableし、それがデフォルトの動作に戻す知っている
abaini01

Appleにバグレポートを提出することを検討してください:developer.apple.com/bug-reporting
クリスページ

回答:


31

これは私がしました:

.bash_profileファイルに変数を追加する

SHELL_SESSION_HISTORY=0

ターミナルを再起動し、その後、希望どおりに動作します。(端末を閉じた後にコマンドを保存しました)

PS私はまたHISTFILESIZEHISTSIZE変数を使用します

HISTSIZEは、bashセッションの進行中に履歴リストのメモリに保存される行またはコマンドの数です。

HISTFILESIZEは、(a)セッションの起動時に履歴ファイルに許可される行またはコマンドの数であり、(b)将来のセッションで使用するためにbashセッションの終了時に履歴ファイルに保存されます。


3
その1行を追加すると、El Capitanでうまく機能します。ありがとう。
エイダン

2
ありがとう!誰かが偶然知っていたら、これもなぜ機能するのか知りたいです。(History = 0は、すべての履歴が失われるという無知な心を暗示しますが、逆の効果があるようです。)
マイクウィリアムソン

@Sysqa「中間」ソリューションはありますか?「復元された端末セッションごとに個別にbashコマンド履歴を保存および復元する」機能は、一部のプログラムが恩恵を受ける可能性のある素晴らしい機能のように聞こえます。以前の構成と何らかの構成の新しい構成のメリットを得る方法はありますか?
loco.loop

8

以降OS X 10.11エルキャピタン、システムにインストールスクリプト/etc/bashrc_Apple_Terminalのために復元された端末ごとに個別のコマンド履歴を保存/復元するために、ターミナルとの座標を再開

/etc/bashrc_Apple_Terminal端末ごとのコマンド履歴の管理方法とカスタマイズ方法の説明については、コメントをお読みください。

カスタマイズPROMPT_COMMANDする場合は、システムが提供するコマンドを削除しないように、必ず前の値に連結してください。

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

EXITシグナルハンドラーをインストールする場合は、trap同様のことを行ってください(または、以前の値に連結する方法がわからない場合は、ハンドラーからshell_session_updateを呼び出してください。少し複雑です)。

シェルを終了すると、このコードは新しいコマンドを端末の履歴に保存します~/.bash_sessions。問題が発生したかどうかを確認するには、ターミナルを閉じる代わりにexit(またはControl-D)でシェルを手動で終了します。進捗メッセージを記録します。完了していない場合、または何らかの警告またはエラーメッセージが表示されている場合は注意してください。

一般に、bashrc_Apple_Terminalユーザーが互換性のないカスタマイズを実行したように見える場合、セッションごとの履歴を検出して無効にしようとします。処理できないものを見つけたようです。Appleにバグレポートを提出することを検討してください:https : //developer.apple.com/bug-reporting/


特別な設定は行っていないので、問題ではないと思います。PROMPT_COMMANDの機能について説明してください。
-loco.loop

@ loco.loop「BashのPROMPT_COMMAND変数は何のためにあるのですか?」または「/etc/bashrc_Apple_TerminalPROMPT_COMMANDを何のために使用するのですか?」という意味ですか?後者の場合、詳細に文書化されているコードを参照します。または、それについて別のQ&Aを開始する必要があります。
クリスページ

PROMPT_COMMANDの意味... @ChrisPage
loco.loop

@ loco.loop Bashのドキュメントを参照するか、それについてのQ&Aを開始することをお勧めします。
クリスページ

6

RVM(Rubyバージョンマネージャー)がインストールされている他のユーザーがいる場合に備えて、次の行が~/.profile~/.bashrcまたは~/.bash_profileファイルにあるかどうかを確認してください。

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

おそらくRVMが、bash_sessionsを実行するためのexit "hook"を妨げています。

それが私にとっての問題でした。コメントアウトしてみてください。

ソース:Reddit


3

Mac OS Xの新規インストール(10.13.6に更新)で、bashコマンドの履歴が保存されていませんでした。.bashrcまたは.bash_profileファイルもありませんでした。この場合、空の.bashrcファイルを追加するだけで修正されました。

touch .bashrc

それがあなたが必要とするすべてのようです...


Mojave / 10.14の問題も修正しているようです:-)
ssc

3

新しくインストールしたosx Mojaveでも同じ問題が発生しました。私は~/.bash_historyファイルをチェックし、これを見ました:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

それを金箔に戻すだけで問題は解決しました。私が使用した:

sudo chown gilm /Users/gilm/.bash_history

そしてそれは私の問題を解決しました。


2

.bash_logout以下を使用してファイルを作成することもできます。

shell_session_update

GitHubコメントから入手


または、手動でtrap shell_session_update EXIT1回入力してログアウトします。/etc/bashrc_Apple_Terminalスクリプトには、ここに含めるにはあまりにも退屈な手がかりがあります。
MarkHu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.