40 votes

Est-il possible d'unifier les fichiers historiques en bash?

Je lance régulièrement plusieurs sessions screen sur mes bureaux et serveurs Linux.

Un problème avec cela est que lorsque je fais un grep dans mon historique de commandes, je découvre que j'ai exécuté une commande dans une session différente et que je dois me détacher puis me rattacher pour obtenir cet élément d'historique.

Est-il possible de 'forcer' les historiques mis à jour de manière différente à partir de plusieurs sessions à être tous regroupés dans un historique central ?

43voto

jms Points 318

Il y a deux choses que vous devez faire :

  1. Insérez la commande shopt -s histappend dans votre fichier .bashrc. Cela ajoutera à l'historique au lieu de l'écraser.
  2. Aussi dans votre fichier .bashrc, insérez PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n" et le fichier d'historique sera réécrit et relu à chaque fois que bash affiche l'invite.

EDIT : Merci à e-t172 pour le truc history -n

14voto

Harmony Orb Points 140

Veuillez ne pas utiliser history -a; history -n, cela ne fonctionne pas comme vous vous y attendez et vous laissera avec de nombreuses commandes en double et désordonnées dans votre historique. Une solution qui fonctionne généralement comme prévu est la suivante:

# historique bash unifié
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Utiliser un retour à la ligne au lieu d'un point-virgule est également une manière courte de traiter le problème de point-virgule manquant/en double avec PROMPT_COMMAND.

0voto

Klesun Points 165

Aucune des solutions ici n'a fonctionné pour moi, mais ce qui a fonctionné était simplement d'utiliser :

cat ~/.bash_history | grep something

au lieu de

history | grep something

Bravo à cette réponse SO.

-1voto

czayas Points 101

PROMPT_COMMAND n'est pas défini par défaut dans certaines distributions. Par exemple, il est défini dans Arch, mais pas dans Debian.

J'ai un bashrc dans mon Dropbox que j'utilise en changeant de distribution, et il inclut :

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X