Je dois supprimer toutes les commandes de mon historique correspondant à une chaîne. J'ai essayé:
$ history | grep searchstring | cut -d" " -f2 | history -d
-bash: history: -d: option requires an argument
$ history | grep searchstring | cut -d" " -f2 | xargs history -d
xargs: history: No such file or directory
$ temparg() { while read i; do "$@" "$i"; done }
$ history | grep searchstring | cut -d" " -f2 | temparg history -d
(no error, but nothing is deleted)
Quel est le bon moyen de le faire?
bash
text-processing
command-history
xargs
linuxfix
la source
la source
history -d X
. Je suis tombé sur cette question parce que je venais de le fairehistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Aucune erreur, mais rien n'a été supprimé. Quelqu'un peut-il expliquer pourquoi?Réponses:
La
history
commande fonctionne uniquement sur votre fichier d'historique$HISTFILE
(généralement~/.history
ou~/.bash_history
). Ce sera beaucoup plus facile si vous supprimez simplement les lignes de ce fichier, ce qui peut être fait de plusieurs façons.grep
est une façon, mais vous devez faire attention à ne pas écraser le fichier tout en le lisant:Une autre façon consiste à
sed
:la source
$HISTFILE
pourrait contenir des espaces, probablement la peine de le citer.La réponse de Michael Mrozek fonctionnera si vous ne vous souciez pas de supprimer des commandes de la session en cours. Si vous le faites, vous devez écrire dans le fichier historique avant de faire les opérations de son message en faisant
history -a
.De plus, après avoir supprimé les entrées souhaitées de votre fichier d'historique, vous pouvez le recharger en émettant
history -c
, puishistory -r
.la source
Sur la base des réponses de Michael et Chris , j'ai trouvé ce qui suit. Ajoutez-le à votre
~/.bashrc
fichier, puis chargez-le avec. ~/.bashrc
ousource ~/.bashrc
.la source
Pour ceux qui recherchent une doublure:
Donc, si vous voulez par exemple. supprimez plusieurs lignes contenant un mot de passe, remplacez simplement "SEARCH_STRING_GOES_HERE" par le mot de passe. Cela recherchera toute votre histoire pour cette chaîne de recherche et la supprimera.
2 choses à savoir
la source
Cela a fonctionné pour moi. history -c && history -a n'a pas rechargé le fichier d'historique correctement pour moi. Au lieu de cela, je quitte simplement ma session juste après avoir réécrit le fichier historique afin que celui en mémoire ne le remplace pas.
la source