Gestion de l'historique des commandes avec plusieurs terminaux

85

J'utilise principalement Terminator, et il est généralement ouvert avec 3 fenêtres de terminal divisées. J'utilise également le terminal Gnome pour diverses raisons.
Je me demande comment l'historique de bash est géré dans ce cas, car je manque parfois des commandes déjà émises lorsque j'exécute history

Par exemple, mon invite indique la ligne d'historique de bash actuelle ( \! ) et si je lance Terminator avec 3 fenêtres de terminal fractionnées, j'obtiens la même ligne d'historique (disons 100) sur tous les terminaux. Quelle histoire sera sauvée?

Lancement également du terminal Gnome après avoir utilisé Terminator Je reçois la ligne 100 au démarrage, quelles que soient les commandes émises auparavant dans Terminator

    
posée zetah 18.11.2011 - 07:39
la source

4 réponses

77

La session bash enregistrée est celle du terminal fermé au plus tard. Si vous souhaitez enregistrer 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 elle est définie, la valeur est exécutée en tant que commande avant de lancer chaque invite principale."

     

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

     

Donc, après avoir mis cette ligne dans /etc/bash.bashrc , je n'ai pas à me réinventer des roues ou à perdre de précieuses secondes en ré-entrant simplement parce que je suis paresseux avec mes terminaux.

Quoi qu’il en soit, vous devrez tenir compte du fait que les commandes provenant de différentes sessions seront mélangées dans votre fichier d’historique. Il ne sera donc pas si simple de le lire plus tard.

Voir aussi:

réponse donnée jcollado 18.11.2011 - 07:52
la source
26

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.$$
# 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 pour moi.

Je viens d'utiliser 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 1er argument, par exemple sudo mount dans la chaîne de tri).

    
réponse donnée waltinator 20.11.2011 - 00:48
la source
4

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

    
réponse donnée Eli Bendersky 25.01.2016 - 00:33
la source
4

Pour afficher history de tous les terminaux:

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

Source: lien

réponse donnée Elijah Lynn 31.10.2013 - 20:17
la source

Lire d'autres questions sur les étiquettes