Salve a tutti ~ Come posso rimuovere tutte le stringhe duplicate all'interno del file bash_history da terminale? Grazie.

chiesto 02 Apr '14, 20:27

nico's gravatar image

nico
9833416


Il default della configurazione di bash in Ubuntu dovrebbe prevedere proprio questo. Nel file .bashrc dovrebbe esserci una riga con

HISTCONTROL=ignoreboth

che è una abbreviazione per ignorespace and ignoredups, che significano che le linee di comando che iniziano con spazio non vengono salvate, e le linee che sono duplicati di linee già presenti nell'history non vengono salvate.

Quindi, se ti ritrovi dei duplicati significa che hai modificato questa impostazione e piuttosto che modificare il file .bash_history ti conviene controllare questo.

Edit

Per rimuovere linee duplicate in un file, indipendentemente dalla loro posizione, è possibile usare awk nel seguente modo:

awk '!seen[$0]++' ~/.bash_history > ~/.bash_history.new
mv ~/.bash_history.new ~/.bash_history

anche se ho qualche dubbio relativo al fatto, che spiegavo nel commento, che la history viene poi modificata dal processo bash corrente nel momento in cui termina, per cui le modifiche potrebbero essere in qualche modo compromesse. A questo proposito, se il contenuto del file è considerato di una qualche importanza, sempre meglio fare un backup.

Riferimento, questa mia risposta su U&L: http://unix.stackexchange.com/questions/30173/how-to-remove-duplicate-lines-inside-a-text-file/30178#30178

coll. permanente

ha risposto 02 Apr '14, 21:18

enzotib's gravatar image

enzotib ♦♦
14.0k112186

modificato 03 Apr '14, 18:16

Nel mio bashrc HISTCONTROL=ignoreboth è settata correttamente, eppure è pieno di duplicati. Non so, le uniche cose che ho aggiunto al file di configurazione sono qualche alias e degli export, non ho modificato nulla di ciò che c'era.

(02 Apr '14, 23:40) nico nico's gravatar image

@nico: ma i duplicati, oltre a vederli nel file, ti si presentano anche quando ti muovi nella history con freccia su e giù? Qual è il problema che riscontri? Sappi che la gestione della history è piuttosto complessa, il file viene letto in memoria quanto una shell inizia, poi non viene toccato fino a quando la shell termina, momento in cui la history in memoria viene "aggiunta" al file, ma molte sono le impostazioni che possono modificare questo comportamento. Inoltre se hai più shell aperte, tutte usano lo stesso file di history, quindi anche questo può essere una causa per i duplicati.

(03 Apr '14, 08:57) enzotib ♦♦ enzotib's gravatar image

Il problema si presenta sia quando navigo la history con le frecce che quando cerco qualche comando dato magari il giorno prima con "history | grep prog". In pratica ho più di 2000 record nel bash_history, di cui almeno il 70% sono duplicati. L'altro giorno ad esempio ho backportato alcuni pacchetti di debian sul mio ppa e mi sono ritrovato nell'history ventine di volte in modo ripetuto programmi come cd, dch, debuild, ecc. Per questo volevo rimuovere i duplicati, così da trovare sempre, con poche manovre, i comandi che uso di più.

(03 Apr '14, 17:50) nico nico's gravatar image

@nico: ho modificato la risposta aggiungendo un metodo, con tutte le riserve del caso espresse precedentemente.

(03 Apr '14, 18:17) enzotib ♦♦ enzotib's gravatar image

Grazie mille. Adesso con un piccolo script posso rimuovere i duplicati quando serve.

(03 Apr '14, 19:36) nico nico's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×91
×58

domanda posta: 02 Apr '14, 20:27

domanda visualizzata: 1,090 volte

ultimo aggiornamento: 03 Apr '14, 19:36

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.