macOSのターミナルでコマンド履歴が保存されない

通常、ターミナルの終了時には、当該ターミナルにて入力されたコマンドの履歴が保存され、次にターミナルが開かれたときに過去に入力されたコマンドを(↑キー等によって)呼び出すことができるようになっています。

しかしながら、MacBookリカバリしたところ、表題のことが起きました。

環境

  • MacBook (Early 2015)
  • macOS Mojave (10.14.6)
  • ターミナル (2.9.5 (421.2))
  • bash (3.2.57(1)-release (x86_64-apple-darwin18))

解決策

ターミナルにて、以下のコマンドを実行する。

echo : > ~/.bash_history; exit

これによりターミナルが終了します。 終了前のコマンド履歴は保存されていないものの、次回以降に開かれたターミナルにおいては、その終了時にコマンド履歴が保存されるようになりました。

解説

根本的な原因は不明なものの、少なくとも私の環境では、

  • ターミナルにおいてsave/restore mechanismが有効になっており(~/.bash_sessions_disableが存在しない)、且つ、
  • ~/.bash_historyが存在しないか又はそのサイズがゼロである

ときにターミナルが開かれると、その終了時にコマンド履歴が保存されないようになっていました。

即ち、上記コマンドは、ダミーデータ(:)を書き込むことにより、サイズがゼロより大きい~/.bash_historyを作成するためのものです。