Git Bashでコマンド履歴を即座に保存する方法!

VSCodeでGit Bashを使っていると、コマンド履歴が消えて困ることがありますよね。

これは、VSCodeを閉じた際には、コマンド履歴が保存されないのが原因です。この問題を解決するには、入力したコマンドを即時に保存する必要があります。

この記事では、Git Bashでコマンド履歴を即座に保存する方法をわかりやすく解説します。

コマンド履歴が保存されない原因

Git Bashでは、通常.bash_historyというファイルにコマンド履歴が保存されますが、デフォルトでは次のような問題があります。

  • VSCodeを閉じる際に履歴が保存されない
    • 「VSCodeを×ボタンで閉じた場合」や「VSCodeのターミナルを閉じる場合」にはセッションが正しく終了しない場合があります。この場合、コマンド履歴が.bash_historyに保存されないので、コマンド履歴が消えてしまいます。
    • exitコマンドを使って閉じると、コマンド履歴が.bash_historyに保存されます。
  • セッション終了時にのみ履歴が保存される
    • Bashのデフォルト設定では、セッション終了時にのみ.bash_historyに書き込まれます。そのため、exitコマンドの実行等により、明示的にセッションを終了しない限り、コマンド履歴は.bash_historyに保存されません。

この問題を解決するために、Git Bashでコマンド履歴を即座に保存する設定を追加します。

補足

.bash_historyはホームディレクトリ(Windowsでは C:\Users\<ユーザー名>、LinuxやMacでは /home/<ユーザー名>)にあります。

Git Bashでコマンド履歴を即座に保存する方法

以下の手順を行うことで、入力したコマンドが即座に.bash_historyに保存されるように設定できます。その結果、VSCodeを閉じてもコマンド履歴が消えてしまうことはありません。

Git Bashでコマンド履歴を即座に保存する手順

  • .bashrcを開く
  • .bashrcを編集して設定を追加する
  • .bashrcを反映させる
  • 【補足】.bashrcの設定が正しく反映されたかを確認する

補足

.bashrcはbashを起動したタイミングで読み込まれるファイルです。

.bashrcを開く

Git Bashの設定はホームディレクトリにある.bashrcというファイルで管理されています。.bashrcはWindowsではC:\Users\<ユーザー名>\.bashrc、LinuxやMacでは /home/<ユーザー名>/.bashrcにあります。

まずはVSCode等で.bashrcを開きます。

# VSCodeで開く場合
code ~/.bashrc

# メモ帳で開く場合

notepad ~/.bashrc

# nanoエディタで開く場合
nano ~/.bashrc

~はユーザーのホームディレクトリを表します。例えば、Windowsでは C:\Users\<ユーザー名>、LinuxやMacでは /home/<ユーザー名> を指します。

.bashrcを編集して設定を追加する

.bashrc ファイルを開いたら、末尾に以下のコードを追記してください。

追加するコード

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
  • shopt -s histappend
    • コマンド履歴を「上書きモード」ではなく「追記モード」で保存する設定です。
    • デフォルトでは、セッション終了時に履歴を上書き保存してしまうため、別のセッションの履歴が消える問題が起こります。この設定で、それを防ぎます。
  • PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
    • history -a: 現在のセッションで入力したコマンドを.bash_historyに追記する。
    • ;$PROMPT_COMMAND: 既存のPROMPT_COMMANDの設定を上書きせずに追記する。

.bashrcを反映させる

.bashrc を編集しただけでは、設定は反映されないので注意してください。以下のコマンドを実行して.bashrcの設定を反映させます。

source ~/.bashrc

ターミナルを再起動しても設定は反映されますが、sourceコマンドを使うとすぐに反映できます。

.bashrcの設定が正しく反映されたかを確認する

.bashrcの設定が正しく反映されたかを確認するために以下のコマンドを実行してみましょう。

echo "Hello, World!"

ターミナルを閉じて再起動します。その後、以下のコマンドで履歴を確認してみましょう。先ほど実行したコマンド(例: echo "Hello, World!")が表示されていれば、設定は正しく反映されています。

history

補足

.bashrcを作成後にGit Bashを起動すると、以下のメッセージが表示されます。

WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.

This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.

これは、「~/.bashrc は見つかったけど、~/.bash_profile~/.bash_login、または ~/.profile が見つからないので、~/.bashrcを読み込む~/.bash_profileを作ったよ!」という内容です。

~/.bash_profileの中身を見ると、以下のようになっており、~/.bash_profile~/.profile が存在する場合には~/.profileを読み込み、~/.bashrc が存在する場合には~/.bashrcを読み込んでいます。

$ cat ~/.bash_profile
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

本記事のまとめ

この記事ではGit Bashでコマンド履歴を即座に保存する方法について説明しました。

.bashrcに以下の設定を追加することで、VSCodeを閉じた場合でもコマンド履歴が失われることなく、次回のセッションで同じ履歴を利用できます。

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

お読み頂きありがとうございました。