J'ouvre souvent des tas 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 faire défiler vers le haut et traquez-le davantage, etc. Parfois, mes terminaux se ferment sans «sortie» et tout ce que j'ai écrit est perdu [Parfois, j'ai eu 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?
control-r
la recherche inversée dans l’historique des commandes d’une bash. Plus pratique quehistory | grep
si vous avez besoin d'une expression régulière.Réponses:
Une solution simple telle que détaillée dans Mettre à jour l'historique Bash en temps réel .
Il est dit de mettre ces commandes dans la configuration .bashrc:
La première commande change le
.history
mode de fichier à ajouter. Et le second configure lahistory -a
commande à exécuter à chaque invite du shell. Le-a
immédiatement écrit les lignes actuelles / nouvelles dans le fichier historique.Connexes pour zsh:
la source
Essayez de mettre ceci dans votre
.bashrc
: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
lire le contenu de$HISTFILE
et l'insérer dans l'historique de la session en cours. Cela relèvera le compteur d’historique du nombre de lignes$HISTFILE
.Je pense que cela signifie que les commandes sont disponibles presque immédiatement (vous avez un terminal, vous écrivez
echo 1
, un deuxième terminalecho 2
, d'abordecho 3
et en appuyant deux fois sur la flèche, vous devriez en avoirecho 2
. Vous devez émettre une commande dans un terminal donné pour avoir accès à ce qui a été écrit.la source
man history
bash
intégrée, elle est donc décrite dansman bash
. Vous pouvez également utiliserhelp history
.-r
et-c
vs juste avoir-a
.history -c; history -r
? J'imagine que c'est mieux pour vous, que ce serait mieux pour moi seulement parfois, j'utilise souvent plusieurs coquillages pour faire un travail, alors je préfère que l'histoire soit combinée autant que possible. En fait, cela n’empêche que cette commande ne soit écrite dans l’histoire qu’après sa fin. En général, lorsque je démarre une session SSH sur un hôte et que je veux en ouvrir un autre pendant que le premier est toujours en cours d'exécution, je dois le ressaisir, car il n'a pas encore été écrit dans l'historique.history -a
pourrait suffireJ'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
ethistory -r
) introduisent un délai notable ( environ 0,2 seconde) avant l'affichage de l'invite. L'utilisation dehistory -n
sorte que seules les nouvelles lignes du fichier d'historique soient lues est plus rapide:PROMPT_COMMAND
ne doit pas être exporté car il s’agit d’une variable shell.la source
Une note pour toutes les autres réponses (qui sont fondamentalement la même chose):
Mettre
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
en.bashrc
(ou amis) suffit.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 ellehistory -a
ajoute toujours de nouvelles lignes au fichier et ne l'écrase jamais. Aussi, au moins à partir de Bash 4,histappend
est le comportement par défaut.la source
shopt -s histappend
. Notez aussi que je l'ai ajouté à~/.bash_profile
histappend
, car il s'agit du comportement par défaut. Je le chercherais, mais je n'ai pas accès à un Mac.