80

我正在使用适用于 Windows 的 Git(版本 1.7.8-preview20111206),即使我的 HOME 文件夹中有一个 .bash_history 文件,它也永远不会自动更新。当我启动 Git Bash 时,我可以在我手动添加到 .bash_history 文件的历史命令中看到,但它不会自动更新。

我使用该shopt -s histappend命令确保每次关闭 shell 时都会保存历史记录,但它不起作用。

如果我手动使用该history -w命令,那么我的文件会被更新,但我想了解为什么 shopt 命令不能按我的理解工作。

任何人都可以告诉我为什么会发生这种行为?

4

10 回答 10

108

我把这个放在我的~/.bash_profile

PROMPT_COMMAND='history -a'
于 2012-06-05T16:34:35.533 回答
37

正如这里所说,要在 Windows 上保存 git bash 历史记录,您不能使用X按钮关闭终端。请改用exit命令。无论接受的答案中提到的配置如何,都将保存命令历史记录。

于 2014-09-19T19:32:46.680 回答
30

创建以下文件

~/.bash_profile
~/.bashrc

并将以下行放入它们中

PROMPT_COMMAND='history -a'

要从控制台(git bash)本身执行此操作,请使用以下命令

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

什么history -a意思

history --help命令

-a 将此会话中的历史行追加到历史文件中

是什么PROMPT_COMMAND

Bash 提供了一个名为 PROMPT_COMMAND 的环境变量。在 Bash 显示提示之前,此变量的内容作为常规 Bash 命令执行。

.bash_profile和之间的区别.bashrc

.bash_profile为登录 shell 执行,而.bashrc为交互式非登录 shell 执行。

当您通过控制台登录(输入用户名和密码)时,无论是坐在机器上,还是通过 ssh 远程登录:在初始命令提示符之前执行 .bash_profile 以配置您的 shell。

但是,如果您已经登录到您的机器并打开了一个新的终端窗口 (xterm),那么 .bashrc 会在窗口命令提示符之前执行。当您通过在终端中键入 /bin/bash 来启动新的 bash 实例时,也会运行 .bashrc。

在 OS X 上,终端默认每次都运行一个登录 shell,因此这与大多数其他系统略有不同,但您可以在首选项中进行配置。

参考

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

于 2020-03-17T08:40:28.670 回答
8

如果您在VSCode中使用 Git bash,请参阅上面 CM 的评论。

这适用于在 Visual Studio Code 中运行 git 的 bash,但我必须把它放在 ~/.bashrc 而不是 ~/.bash_profile。– 厘米 7 月 29 日 14:43

这为我解决了。

于 2019-11-14T11:54:12.593 回答
5

如果您在 Windows 8 中使用 git bash,只需将其放入您的 ~/.bash_logout 文件中:

history > .bash_history

显然你需要一个 ~/.bash_history 文件。

问候。

于 2013-09-18T04:06:32.313 回答
4

Pablo R. 和 LinuxSecurityFreak提供的Unix Stackexchange的更完整答案:

将以下内容添加到您的 ~/.bashrc

# Avoid duplicates
HISTCONTROL=ignoredups:erasedups
# When the shell exits, append to the history file instead of overwriting it
shopt -s histappend

# After each command, append to the history file and reread it
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

注意:“这个 PROMPT_COMMAND 解决方案的问题是每个历史项目的数字在每个命令之后都会发生变化:(。例如,如果您键入history(1) ls(2) rm,那么您!1需要重复 (1),历史数字可能会改变并可能运行 rm 命令……”(克里斯·金普顿)

于 2021-08-23T15:14:56.170 回答
1

对我来说,有效的是进入 C:\Users\MY_USER\ 并删除 .bash_profile 文件。

ps:我用的是windows 10

于 2020-01-20T13:51:51.203 回答
1

我正在使用 Windows 10,这是一个权限问题,我的临时解决方案是添加所有人组并赋予它对~/.bash_history文件的完全控制权。

于 2020-03-18T20:07:55.977 回答
0

顺便说一句,对于那些使用便携式版本的 Git for Windows 的人,不需要创建 .bash_profile 或 .bashrc。只需添加到C:<path to your Git Portable folder>\etc\bash.bashrc

PROMPT_COMMAND='history -a'
于 2021-03-08T15:27:58.323 回答
0

在另一篇文章中找到了答案:https ://superuser.com/questions/555310/bash-save-history-without-exit

如果您想在两个终端之间更新历史记录。

作为一个窗口用户,我.bash_profile在我的用户文件夹中创建了一个文件。然后我添加以下内容:PROMPT_COMMAND='history -a;history -c;history -r'

于 2022-01-17T15:34:08.140 回答