web-dev-qa-db-fra.com

Gestion de l'historique Bash avec plusieurs terminaux

J'utilise principalement Terminator, et il est généralement ouvert avec 3 fenêtres de terminal divisées. J'utilise aussi le terminal Gnome pour diverses raisons.
Je me demande comment l’histoire de bash est gérée dans ce cas car j’ai parfois oublié les commandes précédemment émises lorsque j’exécute history

Par exemple, mon invite montre la ligne actuelle de l’historique bash (\!) et si je lance Terminator avec 3 fenêtres de terminal divisées, la même ligne d’historique (100 par exemple) apparaît sur tous les terminaux. Quelle histoire sera sauvegardée?

Lançant également Gnome Terminal après l’utilisation de Terminator, j’obtiens la ligne 100 au démarrage, quelles que soient les commandes passées auparavant dans Terminator

109
zetah

La session bash enregistrée est celle du terminal le plus fermé. Si vous voulez sauvegarder les commandes pour chaque session, vous pouvez utiliser l'astuce expliquée ici .

export Prompt_COMMAND='history -a'

Pour citer la page de manuel: "Si cette option est définie, la valeur est exécutée sous forme de commande avant l'émission de chaque invite principale."

Ainsi, chaque fois que ma commande est terminée, il ajoute l'élément d'historique non écrit à ~/.bash_history avant d'afficher à nouveau l'invite (uniquement $ PS1).

Donc, après avoir mis cette ligne dans /etc/bash.bashrc, je ne suis plus obligé de me réinventer ou de perdre de précieuses secondes à taper à nouveau du matériel simplement parce que j'étais paresseux avec mes terminaux.

Quoi qu'il en soit, vous devrez tenir compte du fait que les commandes de différentes sessions seront mélangées dans votre fichier d'historique afin qu'il ne soit pas si simple de le lire ultérieurement.

Voir également:

104
jcollado

Après plusieurs lectures de man bash, j'utilise des fichiers d'historique distincts pour chaque shell. J'ai fait un mkdir -m 0700 ~/.history puis ajouté

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$(date +%y%b%d-%H%M%S).$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

à mon ~/.bashrc. De temps en temps, je me souviens de du -sk .history et de le nettoyer. C'est bien d'avoir toutes les commandes que j'ai tapées conservées pour moi.

J'ai juste utilisé ce qui précède pour voir ce que je faisais récemment:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
ou
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(pour inclure le premier argument, par exemple Sudo mount dans la chaîne de tri).

31
waltinator

Pour afficher history à partir de tous les terminaux:

Ajoutez export Prompt_COMMAND='history -a; history -r' à votre fichier .bashrc.

Source: http://northernmost.org/blog/flush-bash_history-after-each-command


7
Elijah Lynn

Voir aussi " conserver l'historique persistant dans bash " pour une autre alternative. Il invite votre invite à envoyer toutes les commandes jamais saisies de n’importe quel terminal dans un fichier "historique persistant" (à côté de ce qui est habituellement fait pour le .history normal).

6
Eli Bendersky