Je travaille sous Mac OSX, alors je suppose que j'utilise bash ...?
Parfois, j'entre quelque chose dont on ne veut pas se souvenir dans l'histoire. Comment puis-je l'enlever?
Je travaille sous Mac OSX, alors je suppose que j'utilise bash ...?
Parfois, j'entre quelque chose dont on ne veut pas se souvenir dans l'histoire. Comment puis-je l'enlever?
Réponses:
Si vous souhaitez exécuter une commande sans l'enregistrer dans l'historique, ajoutez-y un espace supplémentaire.
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Pour que cela fonctionne, vous avez besoin de l'un ignorespace
ou ignoreboth
de l'autre HISTCONTROL
. Par exemple, exécutez
HISTCONTROL=ignorespace
Pour rendre ce paramètre persistant, mettez-le dans votre .bashrc
.
Si vous avez déjà exécuté la commande et souhaitez la supprimer de l'historique, utilisez d'abord
history
pour afficher la liste des commandes de votre historique. Recherchez le numéro à côté de celui que vous souhaitez supprimer (par exemple 1234) et lancez
history -d 1234
De plus, si la ligne que vous souhaitez supprimer a déjà été écrite dans votre $ HISTFILE (ce qui se produit généralement lorsque vous terminez une session par défaut), vous devrez écrire à $ HISTFILE, sinon la ligne réapparaîtra lorsque vous ouvrirez une nouvelle session. session:
history -w
history -a
, dans ce cas, il est déjà écrit dans le fichier d'historique, plutôt que sur la sortie sous une configuration normale. Plus précisément: mywiki.wooledge.org/BashFAQ/088
history -w
. Sinon, quand vous quittez, la ligne supprimée est toujours là!
history -w
after history -d {num}
était exactement ce dont j'avais besoin - cette information critique devait être ajoutée à la réponse, sinon un utilisateur pourrait penser qu'une suppression temporaire du shell actuel est en réalité permanente.
history -w
est nécessaire pour les entrées déjà écrites dans le .bash_history
fichier. Comment reproduire (par exemple sur CentOS 7 avec configuration du stock): 1. login 2. entrez la commande echo foo
3. déconnectez-vous 4. reconnectez-vous 5. supprimez l'entrée pour echo foo
6. déconnectez-vous 7. reconnectez-vous: l'entrée est toujours là. En fonction de la manière dont vous configurez votre historique bash, vous pouvez peut-être reproduire ce problème autrement, par exemple si vous provoquez l'écriture de l'historique avant la déconnexion.
Pour effacer toute votre histoire, utilisez
history -c
Pour supprimer une seule ligne, utilisez
history -d linenumber
J'ai ceci dans mon ~/.bashrc
, ce qui fait que la commande $ forget
supprime la commande précédente de l'historique
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
plus simple?
history | tail -n1
est la history
commande elle-même, la suppression de ce numéro donne une mauvaise entrée. Cependant, history -d $( history | awk 'END{print $1-1}' )
combine la sélection de ligne, la sélection de champ et la soustraction.
Si vous voulez oublier toute la session bash, vous pouvez kill
utiliser le processus bash en cours. Puisque la variable $$
contient le pid
shell actuel, vous pouvez faire:
kill -9 $$
Vous devez écrire les modifications après avoir effacé l'historique. Et si vous ne souhaitez pas que la commande history wipe soit dans votre historique, vous devez exécuter la commande comme suit:
history -c && history -w && logout
Bonne chance.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done