"Git Bash here" is not preserving bash history between sessions [duplicate]
Asked Answered
S

3

15

I am running Git-1.8.0-preview20121022 on Windows 7 and the install was with "Git Bash Only" (least intrusive to Windows cmd).

When I open the Git Bash from the start menu shortcut, everything is fine with the history.

But when the Git Bash here context menu (either the git-cheetah shell extension one or the simpler registry one) is what launched a session, the commands from that session are not saved to the .bash_history.

How could figure out why this is happening? Or better yet, does someone know how to fix this?

Sacerdotal answered 7/1, 2013 at 15:59 Comment(0)
V
21

You should be able to fix this by adding this line to your ~/.bash_profile

PROMPT_COMMAND='history -a'
Veer answered 7/1, 2013 at 16:2 Comment(3)
Thanks! I ended up using HISTCONTROL and HISTIGNORE as well.Sacerdotal
didn't work for me. I needed to have a HISTFILE set.Spikelet
This worked for me on Win 7 64-bit. Was tearing hair out for a while as wouldn't work - then realised I'd created with Windows line-endings, which breaks. If having issues, double-check you've saved with Unix line-endings using an editor that supports this - not e.g. Notepad!Bice
H
13

As mentioned here: https://mcmap.net/q/186320/-bash_history-does-not-update-in-git-for-windows-git-bash

Create the following files

~/.bash_profile
~/.bashrc

And put the following line in both of them

PROMPT_COMMAND='history -a'

To do this from the console (git bash) itself use the following commands

echo "PROMPT_COMMAND='history -a'" >> ~/.bash_profile
echo "PROMPT_COMMAND='history -a'" >> ~/.bashrc

What history -a means

From history --help command

-a append history lines from this session to the history file

What is PROMPT_COMMAND ?

Bash provides an environment variable called PROMPT_COMMAND. The contents of this variable are executed as a regular Bash command just before Bash displays a prompt.

Difference between .bash_profile AND .bashrc

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

When you login (type username and password) via console, either sitting at the machine, or remotely via ssh: .bash_profile is executed to configure your shell before the initial command prompt.

But, if you’ve already logged into your machine and open a new terminal window (xterm) then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

On OS X, Terminal by default runs a login shell every time, so this is a little different to most other systems, but you can configure that in the preferences.

References

https://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html https://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc

Helotism answered 17/3, 2020 at 12:50 Comment(0)
B
5

Putting

PROMPT_COMMAND='history -a ~/.bash_history'

into the .bash_profile did it for me.

Bullfight answered 2/3, 2014 at 3:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.