Pourquoi l'historique de bash sur mon Mac ne sera pas enregistré?

28

J'ai toujours utilisé bash pour le travail et je n'ai jamais eu de problème avec ça. Maintenant, il n'enregistre plus aucune commande dans l'historique. Si j'ouvre un terminal de fenêtre, j'essaye quelques commandes, il agit comme si tout fonctionnait bien et me montre l'historique en utilisant les touches fléchées. Mais si je ferme la fenêtre (et que c'est le moment où elle est censée être sauvegardée sur le fichier .bash_history) et j'ouvre une autre, il n'y a aucun signe des dernières commandes.

Comment puis-je savoir ce qui ne va pas? Ou réinitialisez tout de blanc.

abaini01
la source
Cela pourrait être votre profil ou votre fichier rc. Qu'y a-t-il en eux?
user14492
1
Quels sont les autorisations et le propriétaire de votre .bash_history? Les miens sont 600 et appartiennent à moi. Aussi, que contient $ HIST_FILE?
blm
@blm Les autorisations sont correctes; l'impression du $ HIST_FILE que j'ai découvert sur .bash_sessions . Apparemment, il y a des problèmes lorsque, à la fin d'une session, le système d'exploitation enregistre ces fichiers dans le fichier historique. Je ne veux plus enquêter, j'ai donc simplement mis cela dans ma maison .bash_sessions_disableet je sais qu'il revient au comportement par défaut
abaini01
Veuillez envisager de déposer un rapport de bogue auprès d'Apple: developer.apple.com/bug-reporting
Chris Page

Réponses:

31

J'ai fait ça:

Ajouter une variable au .bash_profilefichier

SHELL_SESSION_HISTORY=0

redémarrez le terminal et après cela, il fonctionne comme je le voudrais. (Il a enregistré les commandes après avoir fermé le terminal)

PS J'utilise également les variables HISTFILESIZEetHISTSIZE

HISTSIZE est le nombre de lignes ou de commandes qui sont stockées en mémoire dans une liste d'historique pendant que votre session bash est en cours.

HISTFILESIZE est le nombre de lignes ou de commandes qui (a) sont autorisées dans le fichier d'historique au démarrage d'une session, et (b) sont stockées dans le fichier d'historique à la fin de votre session bash pour une utilisation dans les sessions futures.

Sysqa
la source
3
L'ajout d'une ligne fonctionne bien pour moi sur El Capitan, merci.
Aidan
2
Merci! J'aimerais savoir pourquoi cela fonctionne aussi, si quelqu'un le sait. (Histoire = 0 impliquerait à mon esprit ignorant que toute l'histoire sera perdue, mais elle semble avoir l'effet inverse.)
Mike Williamson
@Sysqa Y a-t-il une solution "au milieu"? La fonctionnalité qui "enregistre et restaure l'historique des commandes bash indépendamment pour chaque session de terminal restaurée" ressemble à une fonctionnalité intéressante dont certains programmes pourraient bénéficier. Existe-t-il un moyen de bénéficier des avantages de la configuration précédente et de la nouvelle avec une sorte de configuration?
loco.loop
8

À partir d' OS X 10.11 El Capitan , le script installé par le système se /etc/bashrc_Apple_Terminalcoordonne avec Terminal afin de sauvegarder / restaurer des historiques de commandes séparés pour chaque terminal restauré pour Resume .

Lisez les commentaires /etc/bashrc_Apple_Terminalpour une explication de la façon dont il gère les historiques de commandes par terminal et comment le personnaliser.

Si vous personnalisez, PROMPT_COMMANDassurez-vous de concaténer à la valeur précédente afin de ne pas effacer la commande fournie par le système:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Si vous installez un EXITgestionnaire de signaux avec trapassurez-vous de faire quelque chose de similaire (ou appelez shell_session_update à partir de votre gestionnaire si vous ne pouvez pas comprendre comment concaténer à la valeur précédente, c'est un peu impliqué).

Lorsque vous quittez le shell, ce code enregistre les nouvelles commandes dans l'historique du terminal dans ~/.bash_sessions. Pour voir s'il rencontre des problèmes, au lieu de fermer le terminal, quittez le shell manuellement avec exit(ou Control-D). Il enregistre les messages de progression. Notez s'il ne se termine pas ou si des messages d'avertissement ou d'erreur s'affichent.

En général, bashrc_Apple_Terminaltente de détecter et de désactiver l'historique par session s'il semble que l'utilisateur a effectué des personnalisations qui ne sont pas compatibles avec celui-ci. Il semble que vous en ayez trouvé un qu'il ne gère pas. Veuillez envisager de déposer un rapport de bogue auprès d'Apple: https://developer.apple.com/bug-reporting/

Chris Page
la source
Je n'ai pas fait de configuration spéciale, donc je suppose que ce n'est pas le problème. Pourriez-vous expliquer ce que fait PROMPT_COMMAND.
loco.loop
@ loco.loop Voulez-vous dire «À quoi sert la variable PROMPT_COMMAND de Bash?» ou voulez-vous dire «À quoi /etc/bashrc_Apple_Terminalsert PROMPT_COMMAND?»? Si ce dernier, je vous renvoie au code, qui est documenté en détail. Ou, vous devriez commencer une autre Q&R à ce sujet.
Chris Page
Je veux dire quel PROMPT_COMMAND pour ... @ChrisPage
loco.loop
@ loco.loop Je vous renvoie à la documentation de Bash, ou je vous suggère de commencer une Q&R à ce sujet.
Chris Page
6

Juste au cas où il y en aurait d'autres sur lesquels RVM (Ruby Version Manager) est installé: Vérifiez si vous avez la ligne suivante dans votre ~/.profile, ~/.bashrcou vos ~/.bash_profilefichiers.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

C'est probablement RVM qui empêche le "hook" de sortie pour que bash_sessions s'exécute.

C'était le problème pour moi. Essayez de le commenter.

Source: Reddit

Nate
la source
3

Sur une nouvelle installation de Mac OS X (mise à jour vers 10.13.6), l'historique des commandes bash n'était pas enregistré. Il n'y avait pas non plus de fichiers .bashrc ou .bash_profile. Dans ce cas, l'ajout d'un fichier .bashrc vide l'a corrigé pour moi.

touch .bashrc

Cela semble être tout ce dont vous avez besoin ...

Vesal
la source
semble résoudre le problème sur Mojave / 10.14 aussi :-)
ssc
3

J'ai eu le même problème avec un osx Mojave nouvellement installé. J'ai vérifié mon ~/.bash_historydossier et j'ai vu ceci:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Le simple fait de le réinstaller au gilm a résolu le problème. J'ai utilisé:

sudo chown gilm /Users/gilm/.bash_history

et cela a résolu mon problème.

gilm
la source
2

Vous pouvez également créer un .bash_logoutfichier avec les éléments suivants:

shell_session_update

Provenant d'un commentaire GitHub

chasseur
la source
Ou, tapez trap shell_session_update EXITune fois manuellement et déconnectez-vous. Il y a des indices dans le /etc/bashrc_Apple_Terminalscript qui sont trop ennuyeux pour être inclus ici.
MarkHu