Comment synchroniser l'historique des commandes de session de terminal dans bash?

13

J'ai essayé de rechercher ~/.bash_historymes commandes récentes lors d'une session de terminal, mais elles n'étaient tout simplement pas là. Je suppose que c'est parce que j'ai plusieurs sessions de terminal ouvertes.

Existe-t-il un moyen de synchroniser (c'est-à-dire sync-push ou sync-write-out) l'historique des commandes de la session de terminal actuelle dans le fichier bash_history (sans fermer la session et perdre cet environnement)?

(L'idée serait à distance similaire à la façon dont la synccommande stocke les modifications du système de fichiers sur certains systèmes.)

J'imagine que je pourrais configurer bash pour conserver l'historique de plusieurs sessions, mais la possibilité de pousser le tampon d'historique actuel serait toujours utile dans les scénarios lorsque vous travaillez sur une nouvelle machine et que vous avez accidentellement oublié de configurer bash comme vous l'auriez souhaité .

n611x007
la source
J'ai essayé la history -a commande intégrée de shell mais d'une manière ou d'une autre, j'obtiens maintenant une «autorisation refusée» sur le .bash_historyfichier, après cela.
n611x007
Question en double. Voir: unix.stackexchange.com/questions/1288/…
Eduardo Leggiero

Réponses:

19

Ajoutez cette ligne à .bashrc:

export PROMPT_COMMAND="history -a; history -n"

Ouvrez un nouveau terminal et vérifiez.

Explication

  • history -a ajoute de nouvelles lignes d'historique au fichier d'historique.
  • history -nindique bashde lire les lignes qui ne sont pas lues du fichier d'historique à la liste d'historique actuelle de la session.
  • PROMPT_COMMAND: le contenu de cette variable est exécuté comme une commande normale avant l' bashinvite show. Ainsi, chaque fois que vous exécutez une commande, elle history -a; history -nest exécutée et votre bashhistorique est synchronisé.
cuonglm
la source
Merci! Je ne sais pas pourquoi j'ai obtenu une autorisation refusée auparavant, mais avec les nouveaux terminaux, cela semble fonctionner comme prévu! Je suppose que je devrais normalement être en mesure d'utiliser également history -aun terminal avec bashrc non modifié.
n611x007
quand faut-il commencer à s'inquiéter des implications en termes de performances? (Je pense aux appareils bas de gamme, je ne sais pas à quel point cela fait de gros frais.)
n611x007
1
De plus, vous pourriez déjà avoir une commande rapide, dans ce cas, il est préférable d'utiliserexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian
Si ${PROMPT_COMMAND}est vide, cela donne une erreur à cause du leader;
Boris Däppen
@ BorisDäppen a raison, mais cela est facilement résoluexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML