J'ouvre souvent plein de terminaux [pour le moment, j'ai 7 ouvert sur cet espace de travail] et je cherche souvent history
avec grep
pour trouver une commande que je viens d'écrire récemment, mais je ne veux pas traquer le terminal, puis faites défiler et cherchez plus, etc. Parfois, mes terminaux se ferment sans "sortie" et tout ce que j'ai écrit est perdu [Parfois, j'avais besoin de quelque chose que j'avais écrit dans un terminal qui avait été tué].
Alors, y a-t-il moyen de faire en sorte que chaque terminal écrive immédiatement dans .bash_history? ou au moins une fois par minute, ou quelque chose comme ça?
Une solution simple comme détaillé dans Mettre à jour l'historique Bash en temps réel .
Il est dit de mettre ces commandes dans la configuration .bashrc:
shopt -s histappend
Prompt_COMMAND="history -a;$Prompt_COMMAND"
La première commande modifie le mode de fichier .history
à ajouter. Et le second configure la commande history -a
à exécuter à chaque invite du shell. Le -a
écrit immédiatement les lignes actuelles/nouvelles dans le fichier d’historique.
Connexes pour zsh:
Essayez de mettre ceci dans votre .bashrc
:
shopt -s histappend # append to history, don't overwrite it
export Prompt_COMMAND="history -a; history -c; history -r; $Prompt_COMMAND"
Crédit ici: https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135
history -c
efface l'historique de la session en cours. Cela réduira le compteur d'historique du montant de $HISTSIZE
. history -r
lit le contenu de $HISTFILE
et les insère dans l'historique de la session en cours. Cela augmentera le compteur d'historique par le nombre de lignes dans $HISTFILE
.
Je pense que cela signifie que les commandes sont disponibles presque immédiatement (vous avez un terminal, écrivez echo 1
, deuxième terminal echo 2
, premier echo 3
et en appuyant deux fois sur la flèche, vous devriez avoir echo 2
disponible. Vous devez émettre une commande dans un terminal donné pour avoir accès à ce qui a été écrit.
J'ai un fichier d'historique volumineux contenant environ 100 000 entrées et les variantes qui effacent la liste d'historique et lisent l'intégralité du fichier d'historique (à l'aide de history -c
et de history -r
) introduisent un délai notable (environ 0,2 seconde) avant l'affichage de l'invite. Utiliser history -n
pour que seules les nouvelles lignes lues dans l'historique soit plus rapide:
shopt -s histappend
Prompt_COMMAND='history -a;history -n'
Prompt_COMMAND
ne doit pas nécessairement être exporté car il s'agit d'une variable Shell.
Une note pour toutes les autres réponses (qui sont fondamentalement la même chose):
Il suffit de définir Prompt_COMMAND="history -a;$Prompt_COMMAND"
dans .bashrc
(ou entre amis).
En outre, vous pouvez exécuter manuellement history -a
chaque fois que vous souhaitez "capturer" l'historique de la session en cours.
La commande shopt -s histappend
n'est pas nécessaire car history -a
ajoute toujours de nouvelles lignes au fichier et ne l'écrase jamais. De plus, au moins à partir de Bash 4, histappend
est le comportement par défaut.