dans linux ubuntu bash terminal. existe-t-il un moyen de sauvegarder l'historique de bash sans écrire de sortie? j'ai mis la config sur "HISTCONTROL = erasedups"
qui, à mon avis, fonctionne mieux que les ignorés.
de toute façon, pour une raison quelconque, il ne sauvegardera pas les dernières commandes dans le terminal bash, sauf si je tape "exit". J'ai l'habitude de simplement cliquer sur la croix dans la fenêtre du terminal, donc je suis toujours ennuyé que les dernières commandes n'aient pas été enregistrées lorsque je me reconnecte.
rappel: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/#more-130
Réponses:
Histoire de Bash
Toute nouvelle commande émise dans le terminal actif peut être ajoutée au
.bash_history
fichier avec la commande suivante:Le seul concept délicat à comprendre est que chaque terminal a sa propre liste d' historique bash (chargée à partir du
.bash_history
fichier lorsque vous ouvrez le terminal)Si vous souhaitez extraire tout nouvel historique écrit par d'autres terminaux pendant la durée de vie de ce terminal actif, vous pouvez ajouter le contenu du
.bash_history
fichier à la liste d' historique de bash activeCela effacera la liste d'historique actuelle afin que nous n'obtenions pas de liste répétée et ajoutons le fichier d'historique à la liste (maintenant vide).
Solution
Vous pouvez utiliser la variable bash
PROMPT_COMMAND
pour émettre une commande à chaque nouvelle invite (chaque fois que vous appuyez sur Entrée dans le terminal)Cela enregistrera chaque commande dans le fichier historique au fur et à mesure de son émission.
Résultat
Maintenant, tout nouveau terminal que vous ouvrez aura l'historique des autres terminaux sans avoir à
exit
ces autres terminaux. C'est mon flux de travail préféré.Plus de précision
Disons (pour une raison quelconque) que vous avez deux terminaux que vous utilisez simultanément et que vous souhaitez que l'historique se reflète entre les deux pour chaque nouvelle commande.
Le principal inconvénient ici est que vous devrez peut-être appuyer sur Entrée pour réexécuter PROMPT_COMMAND afin d'obtenir la dernière historique du terminal opposé.
Vous pouvez voir pourquoi cette option plus précise est probablement exagérée, mais cela fonctionne pour ce cas d'utilisation.
la source
Pour enregistrer l'historique de bash dans un fichier:
Il exporte l'historique vers un fichier appelé history.txt. Vous pouvez ensuite le visualiser à l'aide de votre éditeur préféré.
Réponse copiée depuis http://tech.karbassi.com/2007/01/14/view-and-change-bash-history/
la source
Il existe un moyen de sauvegarder tout votre historique bash dans un fichier distinct , mais si vous essayez d'utiliser le mécanisme d'historique et que pour une raison quelconque il n'enregistre pas tout votre historique, c'est un problème différent.
Pour sauvegarder tout votre historique dans un fichier séparé, toujours, peu importe ce qui arrive au terminal
Un script fourni ici fait l'affaire.
Pour dire à la commande d'historique "Enregistrer maintenant!" en cliquant sur le X dans une fenêtre de terminal virtuel
Tout d'abord, vous devez comprendre quel mécanisme votre émulateur de terminal virtuel utilise-t-il pour tuer le
bash
processus à sa sortie? - Cela dépendra de l'émulateur de terminal exact que vous utilisez.Il existe quelques options, et toutes impliquent des signaux UNIX .
SIGTERM, SIGINT, SIGQUIT: Le comportement par défaut lorsque Bash reçoit l'un de ces signaux en mode interactif est de l'ignorer, donc ce n'est probablement pas ça.
SIGHUP: Ce signal provoque normalement la fin de Bash et le nettoyage, mais je ne sais pas si ce "nettoyage" implique l'enregistrement du fichier d'historique. Ce n'est probablement pas le cas.
SIGKILL, SIGSTOP: Il est impossible pour Bash en tant que processus de l'espace utilisateur d'ignorer ces signaux. Le noyau peut à tout moment tuer ou arrêter le processus de force en utilisant ces signaux. Si votre émulateur VT envoie l'un de ceux-ci, nous ne pouvons pas le piéger et faire quelque chose avant de quitter, donc vous n'avez pas de chance.
Quelques références: ServerFault question 337123
Question Unix 6332
Utilisation interactive de l'historique dans le manuel GNU Bash
la source