J'ai essayé de rechercher ~/.bash_history
mes 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 sync
commande 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é .
la source
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_history
fichier, après cela.Réponses:
Ajoutez cette ligne à
.bashrc
:Ouvrez un nouveau terminal et vérifiez.
Explication
history -a
ajoute de nouvelles lignes d'historique au fichier d'historique.history -n
indiquebash
de 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'bash
invite show. Ainsi, chaque fois que vous exécutez une commande, ellehistory -a; history -n
est exécutée et votrebash
historique est synchronisé.la source
history -a
un terminal avec bashrc non modifié.export PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
${PROMPT_COMMAND}
est vide, cela donne une erreur à cause du leader;
export PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"