Comment puis-je voir l'historique de Bash à partir de plusieurs sessions de terminal dans Ubuntu? [dupliquer]

11

Duplicata possible: les
fichiers d'historique peuvent-ils être unifiés dans bash?

J'utilise Ubuntu Server 9.10 et je voudrais pouvoir voir mon historique bash pour plus d'une session de terminal. C'est-à-dire mes 200 dernières commandes environ, même si j'ai été déconnecté entre les deux.

Lorsque j'utilise le historyje vois toutes les commandes de ma session de terminal réelle. Comment puis-je voir plus d'historique des commandes de Bash? Existe-t-il des paramètres spécifiques pour bash que je devrais modifier par rapport aux valeurs par défaut dans Ubuntu?

Je n'ai pas de ~/.bash_historydossier. Mais j'ai un ~/.bashrcavec HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsetHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

MISE À JOUR: J'essaie maintenant Ubuntu Server 10.10 dans VirtualBox. Si je désactive simplement VirtualBox sans la commande d'arrêt, la prochaine fois que je démarre, les commandes de la dernière session ne sont pas enregistrées dans le fichier historique.

Les commandes ne sont enregistrées que si j'arrête la machine avec la commande d'arrêt. Par exemple, arrêt -P 0.

Ce doit être la raison de mon problème. Je dois donc comprendre comment enregistrer plus souvent l'historique des commandes. Par exemple, après chaque commande.

Jonas
la source
Qu'obtenez-vous si vous le faites echo $HISTSIZEet echo $HISTFILESIZE? Mon (Ubuntu) ~/.bashrca les mêmes HISTCONTROLlignes que la vôtre, ce qui est mort cérébrale car la seconde remplace la première et les valeurs sont censées être séparées par deux points, pas par des virgules. Si vous le faites set -o, affiche - t-il une ligne qui dit "historique activé"?
pause jusqu'à nouvel ordre.
Je reçois 500avec echoles deux variables ethistory on
Jonas
la deuxième instruction HISTCONTROL est celle que vous obtenez, pas la première. mais ignoreboth est un raccourci bash pour ignoredups + ignorespace donc ce n'est probablement pas le problème.
Quack Quichote
1
ceci est un doublon: superuser.com/questions/37576/…
warren
1
@warren: belle trouvaille. je suis d'accord, ressemble exactement à ce que Sanoj demande.
Quack Quichotte

Réponses:

6

Vous pouvez utiliser

history -a

pour ajouter immédiatement l'historique en mémoire au fichier historique. Une session de terminal ne peut pas voir une autre à moins que cela ne soit fait ou que l'autre ne soit quitté.

Vous pouvez utiliser

history 200 | less

pour voir ce nombre d'entrées.

En plus de HISTSIZEvoir l'entrée dans la page de manuel de Bash concernant HISTFILESIZE.

En pause jusqu'à nouvel ordre.
la source
history -a´ doesn't do anything for me, and not histoire 200 | moins` non plus, mais j'ai mis à jour ma question avec plus d'informations. Merci quand même.
Jonas
Je pense que j'ai trouvé une raison maintenant. L'historique n'est pas enregistré sauf si je fais un arrêt net. Voir ma nouvelle question: unix.stackexchange.com/questions/3330/…
Jonas
6

Une fois que vous vous déconnectez, l'historique est ajouté au fichier ~/.bash_history. Jetez un œil là-dedans.

Par défaut, il se souviendra de vos 500 dernières commandes. Si vous souhaitez enregistrer davantage, définissez la variable HISTSIZEdans ~/.bashrc.

J'ajoute aussi ignoredupsà HISTCONTROL(avec HISTCONTROL=$HISTCONTROL:ignoredup). Cela fait que les commandes consécutives en double ne sont enregistrées qu'une seule fois.

Jetez un œil à tout man 1 bashce que vous pouvez régler sur l'histoire.

Benjamin Bannier
la source
Merci pour votre réponse. Mais je n'ai pas de ~/bash_historyfichier, et non HISTSIZEdans ~/.bashrcmais j'ai HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupset HISTCONTROL=ignorebothet c'est Ubuntu Server, si c'est important.
Jonas
1
@Snoj Notez le .dans ~/.bash_history. Et pour HISTSIZEcela, il utilisera simplement la valeur par défaut de 500 entrées.
Benjamin Bannier
Oui, mais je n'ai aucun ~/.bash_historyfichier sur mon système. J'avais l'habitude ls -ade vérifier.
Jonas
@Sanoj Alors ce n'est peut-être pas la valeur par défaut. Le nom de fichier est stocké dans la $HISTFILEvariable, donc echo $HISTFILEvous dira où chercher.
Benjamin Bannier
echo $HISTFILEme donne /home/sanoj/.bash_history- étrange. Peut-être qu'il n'est pas activé pour des raisons de sécurité?
Jonas
1

L'historique bash est généralement chargé lorsque le shell commence à s'exécuter et est enregistré lorsqu'il est quitté normalement. Vous pouvez utiliser history -aet history -npour remplacer cela, mais pas automatiquement, sauf si vous abusez $PROMPT_COMMANDou quelque chose de similaire.

Ignacio Vazquez-Abrams
la source
0

Sanoj, cela devrait vraiment "fonctionner"; Je ne pense pas qu'il soit censé y avoir quelque chose de spécial que vous devez faire pour activer cela. Il semble que quelque chose interfère avec le cours normal des événements.

Je regarderais dans / etc / profile, / etc / bashrc (ou peut-être /etc/bash.bashrc selon certaines sources), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout, pour voir s'il y a quelque chose qui pourrait affecter l'historique (peut-être grep -i histsur chacun des fichiers ci-dessus).

... Je me demande en particulier si vous avez quelque chose dans ~ / .bash_logout qui supprime le fichier.

Sinon, est-il possible que quelque chose remplace la $HOMEvariable?

Zac Thompson
la source