83 votes

.bash_history ne se met pas à jour dans Git pour Windows (git bash)

J'utilise Git pour Windows (ver. 1.7.8-preview20111206) et bien que j'ai un fichier .bash_history dans mon dossier HOME, il n'est jamais mis à jour automatiquement. Lorsque je lance Git Bash, je peux voir dans l'historique les commandes que j'ai ajoutées manuellement au fichier .bash_history, mais il n'est pas mis à jour automatiquement.

J'ai utilisé le shopt -s histappend pour m'assurer que l'historique est sauvegardé à chaque fois que je ferme le shell, mais cela ne fonctionne pas.

Si j'utilise manuellement la fonction history -w mon fichier est mis à jour, mais je voudrais comprendre pourquoi la commande shopt ne fonctionne pas comme je le pense.

Quelqu'un peut-il me dire pourquoi ce comportement se produit ?

117voto

Steven Penny Points 18523

Je l'ai mis dans mon ~/.bash_profile

PROMPT_COMMAND='history -a'

39voto

Wojciech Frącz Points 1050

Comme il a été dit aquí Pour sauvegarder l'historique de git bash sous Windows, vous ne devez pas fermer le terminal avec X bouton. Utiliser exit à la place. L'historique des commandes sera alors sauvegardé, quelle que soit la configuration mentionnée dans la réponse acceptée.

32voto

Anddo Points 622

Créer les fichiers suivants

~/.bash_profile
~/.bashrc

Et ajoutez la ligne suivante dans les deux

PROMPT_COMMAND='history -a'

Pour ce faire, à partir de la console (git bash), utilisez les commandes suivantes

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

Ce qu'il faut faire history -a moyens

De history --help commande

-a ajouter les lignes d'historique de cette session au fichier d'historique

Qu'est-ce que PROMPT_COMMAND ?

Bash fournit une variable d'environnement appelée PROMPT_COMMAND. Le contenu de cette variable est exécuté comme une commande Bash normale juste avant que Bash n'affiche une invite.

Différence entre .bash_profile ET .bashrc

.bash_profile est exécuté pour les shells de connexion, tandis que .bashrc est exécuté pour les shells interactifs sans login.

Lorsque vous vous connectez (en tapant votre nom d'utilisateur et votre mot de passe) via la console, que vous soyez assis sur la machine ou à distance via ssh : .bash_profile est exécuté pour configurer votre interpréteur de commandes avant l'invite de commande initiale.

Mais si vous vous êtes déjà connecté à votre machine et que vous ouvrez une nouvelle fenêtre de terminal (xterm), alors .bashrc est exécuté avant l'invite de commande de la fenêtre. .bashrc est également exécuté lorsque vous démarrez une nouvelle instance de bash en tapant /bin/bash dans un terminal.

Sous OS X, Terminal exécute par défaut un shell de connexion à chaque fois, ce qui est un peu différent de la plupart des autres systèmes, mais vous pouvez le configurer dans les préférences.

Références

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

10voto

Chris Points 399

Si vous utilisez Git bash dans VSCode voir le commentaire de C.M. ci-dessus.

Cela a fonctionné pour exécuter le bash de git dans Visual Studio Code, mais j'ai dû mettre ~/.bashrc et non ~/.bash_profile . - C.M. 29 juil. à 14:43

Cela m'a permis de résoudre le problème.

5voto

Remy Ticona Points 325

Si vous utilisez git bash pour Windows 8, mettez ceci dans votre fichier ~/.bash_logout :

history > .bash_history

Il est évident que vous avez besoin d'un fichier ~/.bash_history.

Voir aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X