Comment supprimer l'historique des 10 dernières commandes dans le shell?
commandes suit
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 une seule commande par history -d 511
, mais comment supprimer les 10 dernières commandes et dans l'historique de 10 commandes en utilisant une seule commande dans l'interpréteur de commandes?
pouvons-nous écrire un script bash et exécuter pour supprimer l'histoire?
12 réponses
avez-vous essayé d'éditer le fichier d'histoire directement:
~/.bash_history
ma réponse est basée sur des réponses précédentes, mais avec l'ajout d'inverser la séquence de sorte que les éléments de l'histoire sont supprimés de la plus récente à la moins récente.
obtenez votre historique actuel (ajustez le nombre de lignes que vous voulez voir):
history | tail -n 10
cela me donne quelque chose comme
1003 25-04-2016 17:54:52 echo "Command 1"
1004 25-04-2016 17:54:54 echo "Command 2"
1005 25-04-2016 17:54:57 echo "Command 3"
1006 25-04-2016 17:54:59 echo "Command 4"
1007 25-04-2016 17:55:01 echo "Command 5"
1008 25-04-2016 17:55:03 echo "Command 6"
1009 25-04-2016 17:55:07 echo "Command 7"
1010 25-04-2016 17:55:09 echo "Command 8"
1011 25-04-2016 17:55:11 echo "Command 9"
1012 25-04-2016 17:55:14 echo "Command 10"
sélectionnez les positions de début et de fin pour les éléments que vous souhaitez supprimer. Je vais supprimer les entrées 1006 à 1008.
for h in $(seq 1006 1008 | tac); do history -d $h; done
cela générera des commandes history -d
pour 1008 puis 1007 puis 1006.
si je voulais aussi supprimer la commande history delete, alors c'est un peu plus compliqué parce que vous avez besoin de connaître l'entrée courante max history.
Vous pouvez l'obtenir avec (il peut y avoir une meilleure façon):
history 1 | awk '{print }'
en le mettant ensemble, vous pouvez utiliser ceci pour supprimer une gamme, et aussi supprimer le supprimer la commande:
for h in $(seq 1006 1008 | tac); do history -d $h; done; history -d $(history 1 | awk '{print }')
Envelopper tout cela dans une fonction à ajouter à votre ~/.bashrc
:
histdel(){
for h in $(seq | tac); do
history -d $h
done
history -d $(history 1 | awk '{print }')
}
exemple de suppression de la commande 4, 5 et 6 (1049-1051) et de dissimulation de la preuve:
[18:21:02 jonathag@gb-slo-svb-0221 ~]$ history 11
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:51 echo "Command 4"
1050 25-04-2016 18:20:53 echo "Command 5"
1051 25-04-2016 18:20:54 echo "Command 6"
1052 25-04-2016 18:20:56 echo "Command 7"
1053 25-04-2016 18:20:57 echo "Command 8"
1054 25-04-2016 18:21:00 echo "Command 9"
1055 25-04-2016 18:21:02 echo "Command 10"
1056 25-04-2016 18:21:07 history 11
[18:21:07 jonathag@gb-slo-svb-0221 ~]$ histdel 1049 1051
[18:21:23 jonathag@gb-slo-svb-0221 ~]$ history 8
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:56 echo "Command 7"
1050 25-04-2016 18:20:57 echo "Command 8"
1051 25-04-2016 18:21:00 echo "Command 9"
1052 25-04-2016 18:21:02 echo "Command 10"
1053 25-04-2016 18:21:07 history 11
la question était en fait de supprimer les 10 dernières commandes de l'histoire, donc si vous voulez économiser un peu d'effort, vous pourriez utiliser une autre fonction pour appeler la fonction histdel
qui fait les calculs pour vous.
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print }')
# Call histdel with the appropriate range
histdel $(( $n - )) $(( $n - 1 ))
}
cette fonction prend 1 argument, le nombre d'articles d'histoire antérieurs à supprimer. Ainsi, pour supprimer les 10 dernières commandes de l'histoire, utilisez simplement histdeln 10
.
edit:
a changé les itérateurs, bien vu. Aussi, appeler cette fonction avec un itérateur inverse.
vous pouvez probablement faire quelque chose comme ceci:
#!/bin/bash
HISTFILE=~/.bash_history # if you are running it in a
# non interactive shell history would not work else
set -o history
for i in `seq `;
do
history -d $i
done
history -w
où vous évoquerez comme ceci:
./nameOfYourScript 563 514
avis je n'ai pas mis de vérification d'erreur pour les limites. Je vais laisser ça comme un exercice pour le lecteur.
voir aussi cette question
tapez D'abord history
et écrivez la séquence des numéros de ligne que vous voulez supprimer.
pour effacer les lignes de la ligne 1800 à 1815 écrivent ce qui suit dans le terminal:
$ for line in $(seq 1800 1815) ; do history -d 1800; done
si vous voulez supprimer l'historique de la commande suppression, ajouter +1 pour 1815 = 1816 et l'historique de cette séquence + la commande suppression sera supprimée.
par exemple:
$ for line in $(seq 1800 1816) ; do history -d 1800; done
en Combinant les réponses ci-dessus:
history -w
vi ~/.bash_history
history -r
Peut-être sera utile pour quelqu'un.
Lorsque vous vous connectez à n'importe quel utilisateur de n'importe quelle console/terminal l'histoire de votre session courante n'existe que dans un "tampon" qui va vers ~/.bash_history sur votre déconnexion.
Donc, pour garder les choses secrètes vous pouvez juste:
history -r && exit
et vous serez connecté avec tous vos session (et uniquement) de l'histoire effacée ;)
for h in $(seq $(history | tail -1 | awk '{print -N}') $(history | tail -1 | awk '{print }') | tac); do history -d $h; done; history -d $(history | tail -1 | awk '{print }')
si vous voulez supprimer 10 lignes, changez simplement la valeur de N en 10.
une fonction simple peut tuer tout par nombre (bien qu'elle BARF sur les erreurs)
kill_hist() {
for i in $(echo $@ | sed -e 's/ /\n/g;' | sort -rn | sed -e 's/\n/ /;')
do
history -d $i;
done
}
kill_hist `seq 511 520`
# or kill a few ranges
kill_hist `seq 1001 1010` `seq 1200 1201`
j'utilise ce script pour supprimer les 10 dernières commandes de l'histoire:
pos=$HISTCMD; start=$(( $pos-11 )); end=$(( $pos-1 )); for i in $(eval echo "{${start}..${end}}"); do history -d $start; done
il utilise $HISTCMD
environnement var pour obtenir l'index d'histoire et utilise cela pour supprimer les 10 dernières entrées dans history
.
pour supprimer les 10 dernières entrées (sur la base de votre exemple):
history -d 511 520