.bash_history не обновляется в Git для Windows (git bash)

Я использую Git для Windows (версия 1.7.8-preview20111206), и хотя у меня есть файл .bash_history в папке HOME, он никогда не обновляется автоматически. Когда я запускаю Git Bash, я вижу в истории команды, которые я вручную добавил в файл .bash_history, но он не обновляется автоматически.

Я использовал команду shopt -s histappend, чтобы убедиться, что история сохраняется каждый раз, когда я закрываю оболочку, но она не работает.

Если я вручную использую команду history -w, то мой файл обновляется, но я хотел бы понять, почему команда shopt не работает так, как я понимаю.

Кто-нибудь может сказать мне, почему такое поведение происходит?


person franmon    schedule 07.05.2012    source источник
comment
Каковы значения $HISTSIZE, $HISTFILESIZE и $HISTFILE?   -  person Dennis Williamson    schedule 08.05.2012
comment
$HISTSIZE — 10 000, $HISTFILESIZE — 10 000 и $HISTFILE — это /h/.bash_history.   -  person franmon    schedule 08.05.2012


Ответы (8)


Я положил это в свой ~/.bash_profile

PROMPT_COMMAND='history -a'
person Community    schedule 05.06.2012
comment
Чтобы избежать проблемы с окончанием строки, вы можете просто ввести echo "PROMT_COMMAND='history -a'" >> ~/.bash_profile в Git bash, чтобы добавить строку в конец вашего файла .bash_profile (или создать новый, если он не существует). - person Godsmith; 18.05.2016
comment
@Godsmith Вы пропустили букву «P» в своей команде: PROM*P*T_COMMAND=... - person M'sieur Toph'; 27.12.2016
comment
Это также работает для меня на Win10. Приведенный выше код заставляет bash добавлять в файл истории каждую команду, согласно ответу в AskUbuntu. - person Marius Tamulis; 02.07.2017
comment
Это работало для запуска git bash в коде Visual Studio, но мне пришлось поместить его ~/.bashrc, а не ~/.bash_profile. - person C.M.; 29.07.2019

Как было сказано здесь, для сохранения истории git bash в Windows необходимо не закрывать терминал кнопкой X. Вместо этого используйте команду exit. Тогда история команд будет сохранена независимо от конфигурации, упомянутой в принятом ответе.

person fracz    schedule 19.09.2014
comment
это хорошо знать, но мне будет трудно это запомнить. - person Chance; 16.03.2015
comment
@Chance, к счастью, вам больше не нужно об этом помнить, потому что в более новых версиях Git для Windows это не так. Протестировано с версией 2.9.3 на win7 и win10. - person Superole; 29.08.2016
comment
@Superole не работает на моей машине. У меня есть git 2.12.2 для Windows 8.1 (самая новая на 17.04), и единственный способ сохранить историю, о котором я знаю, - это ввести exit перед нажатием кнопки x. - person Sebastian; 02.05.2017
comment
Что, к сожалению, также происходит, когда применяются обновления Windows и перезагружаются. - person dbreaux; 14.02.2019
comment
Вы также можете нажать Ctrl+D вместо ввода exit, это намного быстрее и проще в использовании. Это даже быстрее, чем использовать кнопку «Закрыть»! - person EvgenKo423; 12.03.2021

Создайте следующие файлы

~/.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 выполняется для оболочек входа в систему, а .bashrc выполняется для интерактивных оболочек без входа в систему.

Когда вы входите в систему (вводите имя пользователя и пароль) через консоль, либо сидя за компьютером, либо удаленно через ssh: .bash_profile выполняется для настройки вашей оболочки перед начальной командной строкой.

Но если вы уже вошли в свой компьютер и открыли новое окно терминала (xterm), то .bashrc выполняется до командной строки окна. .bashrc также запускается, когда вы запускаете новый экземпляр bash, набрав /bin/bash в терминале.

В OS X Терминал по умолчанию каждый раз запускает оболочку входа в систему, так что это немного отличается от большинства других систем, но вы можете настроить это в настройках.

использованная литература

https://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html https://apple.stackexchange.com/questions/51036/какая-есть-разница-между-bash-profile-и-bashrc

person Anddo    schedule 17.03.2020

Если вы используете git bash для Windows 8, просто поместите это в свой файл ~/.bash_logout:

history > .bash_history

Очевидно, вам нужен файл ~/.bash_history.

С уважением.

person Remy Ticona    schedule 18.09.2013
comment
Windows 8.1 и GNU bash, версия 3.1.0(1)-релиз (i686-pc-msys) - работает! - person pbaranski; 15.07.2014
comment
@CamiloMartin - см. мой комментарий выше о том, что вы использовали окончания строк Unix (я использовал .bash_profile). - person psdie; 08.01.2015
comment
@psdie Спасибо за предупреждение! ЭОЛы, эти ублюдки. - person Camilo Martin; 08.01.2015
comment
Не работает для меня. Как указывал @fracz выше, проблема в том, что Git bash не сохраняет историю, если вы закрываете окно с помощью X в правом верхнем углу. - person Godsmith; 18.05.2016

Если вы используете Git bash в VSCode, см. комментарий C.M. выше.

Это сработало для запуска git bash в Visual Studio Code, но мне пришлось поместить ~/.bashrc, а не ~/.bash_profile. - СМ. 29 июл в 14:43

Это решило это для меня.

person Chris    schedule 14.11.2019

Для меня сработало то, что я зашел в C:\Users\MY_USER\ и удалил файл .bash_profile.

Ps: у меня виндовс 10

person Samuel Souza    schedule 20.01.2020

Я использую Windows 10, для меня это была проблема с разрешением, мое временное решение состояло в том, чтобы добавить группу «Все» и предоставить ей полный доступ к файлу ~/.bash_history.

person mmahgoub    schedule 18.03.2020

Кстати, для тех, кто использует Portable-версию Git для Windows, нет необходимости создавать .bash_profile или .bashrc. Просто добавьте к C:<path to your Git Portable folder>\etc\bash.bashrc:

PROMPT_COMMAND='history -a'
person d.lacher    schedule 08.03.2021