history
La commande affiche tous les résultats mais nous pouvons filtrer pour obtenir une commande particulière en utilisant history | grep searchingCommand
. C'est vraiment utile.
Mais le problème est qu'il montre également les commandes qui ont été entrées avec une erreur de frappe ou qui ont échoué. Ensuite, identifier le bon est vraiment pénible. J'ai vérifié ce lien: Historique des commandes sélectives dans le terminal? mais ce n'était pas ma solution.
Donc, y a-t-il un moyen de supprimer ces commandes de l'historique qui était incorrect au moment de l'entrée ou plus tard?
Réponses:
J'aimerais ajouter une autre méthode de modification (ou de suppression) des entrées d'historique, que j'ai trouvée assez accidentellement lorsque je travaillais avec le bash:
Pour illustrer cela, commencez par exécuter les trois commandes suivantes dans bash:
Vous pouvez maintenant sélectionner à nouveau ces commandes en utilisant les touches fléchées ou Ctrl+ pet Ctrl+ n.
Supposons que vous souhaitiez modifier les deux premières commandes. Parcourez l'historique jusqu'à ce qu'il
echo 1
apparaisse et remplacez-le parecho 1 - changed
, mais NE PAS APPUYER SUR ENTREE. Si vous avancez maintenant dans votre historique, cette ligne reste dans son état modifié et vous pouvez vous en éloigner et y revenir. Maintenant, déplacez-vous sur la ligneecho 2
et remplacez-la parecho 2 - changed
, encore une fois, n'appuyez pas sur entrée. Pour enregistrer les modifications apportées à ces lignes, sélectionnez une commande de l’historique, à l’exception de ces deux-là, et appuyez sur Ctrl+ c.Bien sûr, au lieu de modifier l’entrée d’historique, vous pouvez également la supprimer, ce qui donnera une ligne vide à cette entrée. Pour supprimer la ligne actuellement affichée à l'invite, appuyez sur Ctrl+ e(qui passe à la fin de la ligne), puis sur Ctrl+ u(qui supprime le texte du début de la ligne au curseur).
Voir aussi https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726 pour une explication plus détaillée de la contexte technique.
Manière la plus simple:
Note :
Cela ne change que les commandes de la session en cours. Si nous voulons modifier les anciennes commandes et enregistrer les modifications, nous devons exécuter la commande suivante avant de fermer le terminal:
la source
ctrl+r
Rechercher la commande que vous souhaitez supprimer / modifier. 2.end
pour déplacer la commande et supprimer / modifier la commande. 3.ctrl+n
pour aller à la ligne suivante puis 4.ctrl+c
Utilisation:
pour supprimer l’entrée d’historique décalée
OFFSET
même avant son ajout à votre fichier d’historique bash. Pour trouver le bonOFFSET
, il suffit de lancer lahistory
commande. C'est le numéro à partir du début de la ligne qui contient l'entrée de l'historique que vous souhaitez supprimer.Et pour sauvegarder les modifications apportées à l’utilisation de l’historique:
Voir plus de détails dans ce guide .
la source
history -w
mots suivants pour enregistrer les modifications. OFFSET signifie également quel numéro esthistory
affiché. Si la ligne que vous essayez de supprimer est 873, utilisezhistory -d 873
.history -w
aprèshistory -d
pour enregistrer les modifications.Editez le fichier
~/.bash_history
et effacez une fois les fautes de frappePar exemple, insérez cette commande:
Éditez quelque chose que vous aimez et après que sauvegardez le fichier et redémarrez le terminal. La commande racine est:
si vous voulez supprimer tout
history -c
devrait faire l'affairesource :
la source
.bash_history
?history -c
ne fonctionne pas Lorsque je ferme le terminal et que je l'ouvre à nouveau, l'historique n'est pas supprimé. -1 votre réponse-c Clear the history list. This may be combined with the other options to replace the history list completely.
sourcehistory -w
aprèshistory -c
pour écrire les modifications.Si vous voulez le supprimer immédiatement du même terminal, vous devez ajouter ce qui suit dans votre fichier ~ / .bashrc.
et redémarrez votre terminal.
Vous pouvez l'ajouter n'importe où dans le fichier .bashrc .J'ai ajouté comme ci-dessous, ainsi que d'autres éléments liés à l'historique.
Habituellement, pendant une session bash, les commandes exécutées ne sont pas écrites dans .bash_history tant que la session n'est pas terminée, il faut donc
PROMPT_COMMAND='history -a'
entrer la commande à cet endroit et ensuite dans .bash_history.Maintenant, chaque fois que vous faites une erreur ou une erreur dans une commande et que vous voulez le supprimer, exécutez la commande suivante
et tada il serait supprimé.
Pour simplifier les choses, vous pouvez créer un alias plus simple et l’utiliser comme
Ainsi, l'exécution
rh
supprimera la dernière commande exécutée de l'historique.Ce qui précède est un alias temporaire qui ne dure que pour une session. Pour le rendre permanent ou persistant, ajoutez
à .bashrc
REMARQUE
Il ne devrait y avoir aucun espace des deux côtés de
=
Si vous ne voulez pas alias, vous pouvez également procéder comme suit
Créez un nom de commande
rh
et placez-le dans le/bin
répertoire:Ouvrez un fichier
rh
et collez le code suivant, enregistrez et fermez:sed -i '$d' ~/.bash_history
Rendre
rh
exécutable et le placer dans le/bin
répertoire:Maintenant, utilisez la
rh
commande pour supprimer la commande récente de l'historique.la source
PROMPT_COMMAND='history -a'
dans le.bashrc
fichier? Et que fera-t-il exactement? J'ai essayésed -i '$d' ~/.bash_history
ça marche sans montage.bashrc
!! Mais le truc du pseudo ne marche pas. J'accepterai votre réponse si vous développez simplement ma question et faites en sorte que le pseudonyme fonctionne ... :).bash_history
fichier ..: P de toute façon .. Pas de problème .. J'ai créé ma propre commande et l'ai placée dans/bin
annuaire. Depuis à cause de votre commande:sed -i "$d" ~/.bash_history
cela fonctionne bien. J'accepte votre réponse .. :)pour supprimer plusieurs lignes (par exemple de 1974 à 1990, vérifiez avec
history
commande):notez que le numéro de ligne à supprimer est toujours le même, puisque vous supprimez celui-ci constamment et passez au suivant.
la source
Si vous utilisez l'option "set -o vi" dans bash (très utile pour rechercher en arrière avec la touche Echap), vous pouvez alors rechercher la ligne et supprimer la ligne avec "dd" comme vous le faites avec "vi".
la source
j
ouk
aprèsdd
pour le faire effacer la commande de l'historique. Si je tape une autre commande ou si je presse simplementEnter
, bash semble supposer qu'il ne s'agit que d'une nouvelle commande et qu'il devrait conserver l'ancienne commande dans l'historique. Il est également intéressant de noter que, une fois l’opération effectuée correctement, la commande est effacée, mais ne la supprime pas. Le résultat est des entrées d’historique vierges. Mais c’est suffisant pour supprimer les mots de passe que j’ai été obligé de taper à la ligne de commande, et beaucoup plus facile que d’autres réponses, alors merci beaucoup de l’avoir posté!J'ai eu une situation où j'avais des entrées superflues dans mon histoire bash d'un Yubikey - peut-être environ 50, correspondant à 'ccccc .....'. Idéalement, je voulais un moyen de supprimer les entrées correspondant à un motif, ce que je suppose que vous pouvez faire avec sed ou quelque chose du genre, en supposant que votre historique ignore les espaces.
Quoi qu'il en soit, je suis devenu paresseux et j'ai fini par utiliser vim, en cherchant 'cccc' et en utilisant 'dd' tout en parcourant chaque match. Ça n'a pas pris plus d'une minute.
la source