historique de bash pour la session en cours

15

Peut-être que j'oublie quelque chose, mais existe-t-il un moyen d'obtenir votre historique bash actuel pour la session actuelle que vous utilisez, comme

si je cours

ssh host
$ pwd
$ ls
$ cd /tmp

Je veux juste voir ces 3 commandes et rien d'autre

Mike
la source
avez-vous vérifié la historycommande ??
Hackaholic
ouais je sais historymais ça ne donne pas que ma session
Mike
Le montant économisé entre les sessions est contrôlé par la variable shell SAVEHIST si je me souviens bien. Ainsi, si la quantité d'historique que vous avez enregistrée la dernière fois était ZÉRO, vous obtiendrez l'historique de la session shell actuelle (mais bien sûr pas aux niveaux inférieurs)
mdpc
@mdpc, quels documents lisez-vous? Dans la page de manuel de Bash, je ne trouve aucune référence à SAVEHIST mais seulement à HISTSIZEet HISTFILESIZE.
Wildcard

Réponses:

15

Une façon légèrement détournée:

history -a ~/current_history

Cela enregistrera l'historique de bash non enregistré de la session en cours ~/current_history, que vous pourrez ensuite consulter.

muru
la source
cela pourrait fonctionner mais ne gère pas plusieurs sessions .. Je suppose que je peux créer un fichier temporaire aléatoire pour le stocker
Mike
1
@Mike utilise peut-être un nom lié au shell PID ~/$$_history.
muru
4
Il convient de noter que cela n'effacera pas l'historique ou n'affectera en aucune façon la sauvegarde normale de l'historique! Je n'étais pas sûr jusqu'à ce que je l'ai testé. :)
NHDaly
Je trouve plus pratique de simplement le faire history -ale jeter avec l'historique précédent dans ~ / .bash_history ... ce qui pourrait être un problème si votre historique est plus long que la coupure, qui est un 1000 sur mes systèmes centos7 et fedora 24.
Ray Foss
0

J'ai eu le problème que je voulais écrire le courant historydans un fichier mais que les entrées soient enregistrées dans le bash principalhistory

J'ai résolu cela en joignant simplement le fichier avec cat:

history -a current-history
cat current-history >> .bash_history
nath
la source
-1

Permet compde comparer l'historique complet (y compris la session Bash en cours) avec l'historique déjà persistant .bash_historyet d'imprimer uniquement les lignes qui sont uniques à la session en cours - qui ne devraient afficher que les commandes qui ont été exécutées depuis le démarrage du shell Bash en cours

comm -23 <( history | cut -c 8- ) ~/.bash_history

Edit: comme l'a souligné @Wildcard, cette commande ne fonctionne pas pour toutes les distributions de comm. J'ai testé cela sur Mac OS.

Une variation de la même idée en utilisant diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'
Christian Kadner
la source
Une bonne pensée, mais très peu fiable dans mes tests. commsuppose une entrée triée. Mais, bienvenue sur Stack Exchange! :)
Wildcard
@Wildcard, les deux côtés de l'entrée commsont triés de manière inhérente dans mon exemple ci-dessus. L'avez-vous exécuté? Et cela n'a pas produit votre historique de session Bash actuel?
Christian Kadner
Oui, je l'ai fait, et non, ce n'est pas le cas. Et non, le contenu de ~/.bash_historyn'est pas trié; et la sortie de historytri n'est pas non plus supprimée. (En plus de cela, commattend une entrée triée lexicographiquement, pas une entrée triée numériquement.)
Wildcard
À droite, je voulais dire que les deux arguments de la commcommande dans mon exemple sont dans le même ordre, pas qu'ils soient triés lexicographiques. La version FreeBSD de commne nécessite pas d'entrée triée lexicographiquement
Christian Kadner
J'utilise Mac OS X. Cela n'a rien à voir avec cela. En y regardant de plus près, il semble que ce soient les premières commandes de l'historique en mémoire, qui ont depuis été écrasées dans le fichier historique par d'autres shells sortants.
Wildcard