Les commandes suivent
511 clear
512 history
513 history -d 505
514 history
515 history -d 507 510 513
516 history
517 history -d 509
518 history
519 history -d 511
520 history
Je peux supprimer un seul par history -d 511
, mais comment supprimer les 10 dernières commandes et entre 10 l'historique des commandes en utilisant une seule commande dans le shell?
Pouvons-nous écrire un script bash et l'exécuter pour la suppression de l'historique?
vi $HISTFILE
et supprimez ce que vous voulez. À utiliserhead -n -10
si vous devez l'automatiser.Réponses:
Avez-vous essayé de modifier directement le fichier d'historique:
la source
~/.viminfo
alors assurez-vous de le supprimer également!.bash_history
peuvent être écrasées par ce qui est conservé en mémoire. J'ai trouvé cette solution utile: superuser.com/a/384383/253543Ma réponse est basée sur les réponses précédentes, mais avec l'ajout de l'inversion de la séquence afin que les éléments de l'historique soient supprimés du plus récent au moins récent.
Obtenez votre historique actuel (ajustez le nombre de lignes que vous souhaitez voir):
Cela me donne quelque chose comme
Sélectionnez les positions de début et de fin des éléments à supprimer. Je vais supprimer les entrées 1006 à 1008.
Cela générera des
history -d
commandes pour 1006, puis 1007 devient 1006 et 1006 est supprimé, puis 1008 (devenu 1007) est maintenant 1006 et est supprimé.Si je voulais également supprimer la commande de suppression d'historique, c'est un peu plus compliqué car vous devez connaître l'entrée d'historique max actuelle.
Vous pouvez l'obtenir avec (il y a peut-être un meilleur moyen):
En le rassemblant, vous pouvez l'utiliser pour supprimer une plage et également supprimer la commande de suppression de l'historique:
Enveloppez tout cela dans une fonction à ajouter à votre
~/.bashrc
:Exemple de suppression des commandes 4, 5 et 6 (1049-1051) et de masquage des preuves:
La question était en fait de supprimer les 10 dernières commandes de l'historique, donc si vous voulez économiser un peu d'effort, vous pouvez utiliser une autre fonction pour appeler la
histdel
fonction qui fait les calculs pour vous.Cette fonction prend 1 argument, le nombre d'éléments d'historique précédents à supprimer. Donc, pour supprimer les 10 dernières commandes de l'historique, utilisez simplement
histdeln 10
.la source
history | tail -1 | awk '{print $1}'
peut être simplifié àhistory 1 | awk '{print $1}'
-bash: tac: command not found
sur Mac OSX, sinon ce serait la meilleure réponse.for h in $(seq 1006 1008); do history -d 1006; done
cela fonctionne dans ubuntu 16.04for i in {1..10}; do history -d $(($HISTCMD-11)); done
la source
history -d 511
fonctionne comme prévu, puishistory -d 512
supprime ce qui était auparavant 513, et 512 reste dans l'historique en tant que commande 511. J'espère que cela a du sens .$x
chaque fois dans la boucle, je supprime$1
. Donc, il supprime d'abord 511, et 512 devient 511. Ensuite, il supprime à nouveau 511, et ainsi de suite.for i in
...history -d $i
et j'ai obtenu les résultats que j'ai décrits dans mon commentaire ci-dessus. En utilisant 1 $, c'est absolument correct, comme indiqué dans votre réponse originale.Tout d'abord, tapez:
history
et notez la séquence de numéros de ligne que vous souhaitez supprimer.Pour effacer les lignes, disons de la ligne 1800 à 1815, écrivez ce qui suit dans le terminal:
Si vous souhaitez supprimer l'historique de la commande de suppression, ajoutez +1 pour 1815 = 1816 et l'historique de cette séquence + la commande de suppression sera supprimée.
Par exemple :
la source
$line
supprime toutes les deux lignes et dépasse ensuite la plage souhaitée.Avec Bash 5, vous pouvez maintenant faire une gamme ... Hourra!:
ou en comptant à rebours 10:
Extrait de la page de l'homme Bash 5 :
Voici ma solution pour Bash 4. Il supprime de manière itérative une seule entrée ou une plage d'historique commençant par l'index le plus bas.
la source
Combinaison des réponses ci-dessus:
history -w vi ~/.bash_history history -r
la source
Éditer:
Changé les itérateurs renforcés, bon appel. Appelez également cette fonction avec un itérateur inverse.
Vous pouvez probablement faire quelque chose comme ceci:
Où vous évoquez comme ceci:
Remarquez que je n'ai mis aucune erreur lors de la vérification des limites. Je vais laisser cela comme un exercice au lecteur.
voir aussi cette question
la source
seq 563 514
n'imprimera rien. Vous avez besoinseq 563 -1 514
. Alternativement, vous pouvez simplement utiliserhistory -d $1
avec des arguments comme514 563
Ce sera peut-être utile pour quelqu'un.
Lorsque vous vous connectez à n'importe quel utilisateur de n'importe quelle console / terminal, l'historique de votre session en cours n'existe que dans un certain "tampon" qui se vide dans ~ / .bash_history lors de votre déconnexion.
Donc, pour garder les choses secrètes, vous pouvez simplement:
history -r && exit
et vous serez déconnecté avec tout l'historique de votre session (et seul) effacé;)
la source
J'ai utilisé une combinaison de solutions partagées dans ce fil pour effacer la trace dans l'historique des commandes. Tout d'abord, j'ai vérifié où est enregistré l'historique des commandes avec:
J'ai édité l'historique avec:
Après cela, je vide la mémoire tampon de l'historique de la session actuelle avec:
La prochaine fois que vous entrerez dans cette session, la dernière commande que vous verrez dans l'historique des commandes est la dernière que vous avez laissée sur pathToFile .
la source
history -c effacera tous les historiques.
la source
pour supprimer les 10 dernières entrées (selon votre exemple):
la source
J'utilise ce script pour supprimer les 10 dernières commandes de l'histoire:
Il utilise l'
$HISTCMD
environnement var pour obtenir l'index de l'historique et l'utilise pour supprimer les 10 dernières entrées danshistory
.la source
Essayez ce qui suit:
la source
for i in {511..520}; do history -d $i; echo "history -d 511"; done
J'utilise ceci (j'ai bash 4):
Les
builtin history
parties ainsi que la dernière-w
est parce que j'ai en place une variante des célèbres astuces pour partager l'histoire entre les terminaux et cette fonction serait cassée sans ces pièces. Ils assurent un appel au real bashhistory
builtin (et non pas à mon propre wrapper), et à écrire l'historique dans HISTFILE juste après la suppression des entrées.Cependant, cela fonctionnera tel quel avec les configurations d'historique "normales".
Vous devez l'appeler avec le nombre de dernières entrées que vous souhaitez supprimer, par exemple:
Supprime les 10 dernières entrées.
la source
Brute mais fonctionnel
la source
Si vous souhaitez supprimer 10 lignes, changez simplement la valeur de N à 10.
la source
Une fonction simple peut tout tuer par nombre (bien qu'elle barfs sur les erreurs)
la source
Court mais doux:
for i in {1..10}; do history -d $(($HISTCMD-11)); done
la source