Le script peut être trouvé ici :https://stackoverflow.com/questions/14750650/how-to-delete-history-of-last-10-commands-in-shell
Pour plus de commodité, voici :
for x in `seq $1 $2`
do
history -d $1
done
Je mets ceci dans mon répertoire include (celui que j'ai ajouté au PATH) où j'exécute de nombreux autres scripts que j'ai écrits et qui fonctionnent très bien.
Cela ne produit pas le résultat souhaité de suppression de lignes de mon historique, en fait cela ne fait rien du tout.
Avez-vous une idée de la raison pour laquelle la commande d'historique ne fonctionne pas ? Je me demande si cela a quelque chose à voir avec les répertoires.
Informations supplémentaires :
J'ai joué avec le code et essayé différentes variantes. Si je mets un echo
devant l'history
commande et l'exécuter, j'obtiens le résultat suivant :
[email protected]:~$ idelhistory 300 305
history -d 300
history -d 301
history -d 302
history -d 303
history -d 304
history -d 305
[email protected]:~$
Donc, pour moi, il semble que cela devrait fonctionner parfaitement. Je n'arrive pas à comprendre pourquoi. Ce script est exécuté à partir de /$HOME/Scripts/ et il a été inclus dans le PATH. J'ai aussi essayé de l'exécuter avec sudo et rien ne change.
Réponse acceptée :
En une phrase :cela ne fonctionne pas parce que vous ne l'appelez pas correctement.
Tout d'abord, puisque votre script ne commence pas par #!/bin/bash
, ce n'est pas vraiment un script bash. Le shell par lequel il est exécuté dépend de la façon dont vous l'invoquez. Lorsque vous l'invoquez à partir de la ligne de commande bash, bash crée une nouvelle instance de lui-même (cela doit de toute façon arriver pour exécuter n'importe quelle commande externe), et c'est cette nouvelle instance qui exécute le script. Ainsi, le script est exécuté avec les mêmes paramètres (y compris l'historique jusqu'à présent) que le shell parent. Il est exécuté avec différentes options; en particulier, le suivi de l'historique est désactivé pour les commandes du script (ce qui vous convient, car sinon cela rajouterait à l'historique que vous souhaitez modifier).
Si l'instance bash exécutant le script a le HISTFILE
L'ensemble de variables dépend s'il a été exporté dans le parent (ce qui est un peu bizarre). S'il n'est pas exporté et donc défini dans l'enfant, le script enfant n'enregistrera pas l'historique modifié lorsqu'il se terminera.
Si HISTFILE
est exporté, le script enfant modifiera votre fichier d'historique. Cependant, à moins que vous n'ayez configuré votre shell interactif pour recharger l'historique après chaque commande, l'historique modifié ne sera récupéré que par les instances nouvellement démarrées de bash.
Si vous souhaitez exécuter un extrait de shell qui affecte l'instance de shell actuelle, vous devez exécuter ce shell dans l'instance de shell actuelle, au lieu de l'exécuter en tant que sous-processus . Vous rencontreriez un problème similaire si vous vouliez faire d'autres choses qui affectent le processus shell lui-même, comme changer de répertoires, définir des variables, etc. Utilisez le .
("point") ou source
builtin pour exécuter un script dans le processus shell actuel.
. idelhistory 300 365
Alternativement, vous pouvez définir cela comme une fonction dans votre .bashrc
.