Nel frattempo sono riuscito a mantenere la mia storia molto più pulita grazie agli ottimi consigli di voi ragazzi che riguardano il HISTIGNORE
opzione in .bashrc
, omettendo tutti quegli inutili ll
o df -k
linee.
Tuttavia, ho anche imparato che il HISTIGNORE
l'opzione è molto restrittiva , anche.
Ad esempio, se hai una linea come questa (semplificata)
HISTIGNORE='ll*:la*:cd*'
non solo questi verranno esclusi dall'elenco , ma anche dalla tua "cronologia in diretta" come vorrei doppiare la cronologia volatile a cui puoi accedere tramite Cursore su /Cursore in basso . Provalo:ora verranno completamente omessi, indipendentemente da quanto tempo scorri la cronologia dei comandi con i tasti cursore.
Tuttavia, a volte lo faccio ho bisogno di queste righe, soprattutto con percorsi molto lunghi e complicati che non voglio riscrivere. D'altra parte, mi piacerebbe avere queste linee esclusiva alla mia cronologia live e non averli archiviati nell'elenco della cronologia poiché cambieranno frequentemente.
C'è un modo per farlo?
Come ulteriore nota a margine, ho capito che per qualche motivo, la cronologia "in diretta" e l'elenco della cronologia a volte diverserebbero molto (cfr. Perché ottengo risultati diversi con lo stesso utente e il comando cronologia).
Risposta accettata:
Puoi usare HISTIGNORE
variabile di ambiente.
Un elenco di modelli separati da due punti utilizzati per decidere quali righe di comando devono essere salvate nell'elenco della cronologia. Ad esempio:
export HISTIGNORE="cd*:ls*"
questo ignorerà tutti i comandi cd e ls dalla cronologia.
MODIFICA:
scusa, nella mia prima lettura non ho prestato sufficiente attenzione alla tua domanda. A proposito, hai ragione:HISTIGNORE
è un'impostazione molto difficile e bash_history ignorerà semplicemente ogni comando elencato in questa variabile (lo ignorerà nel momento in cui lo esegui, se ci sono già voci con questi comandi nel tuo HISTFILE
verranno trovati dalla ricerca inversa della cronologia.
Per prima cosa rispondere alla tua ultima domanda, la cronologia dal vivo e scritta può variare molto se utilizzi terminali diversi contemporaneamente. Potresti provare una soluzione come descritto qui:
Conserva la cronologia di bash in più finestre di terminale
Quello che potresti immaginare è una soluzione in cui usi una funzione nel tuo ~/.bash_logout
file, che cancellerà le voci della cronologia che non desideri.
qualcosa del genere dovrebbe fare quello che vuoi:
function clear_history(){
# hist_ignore regex, this may be done in a more fancy way,
# such as using an env variable, but anyway
MYHISTIGNORE='^cd:^view:^cat'
# write down history to file
history -w
# create a new tmp file for history
tmpFile=$(mktemp)
cp ${HISTFILE} ${tmpFile}
# use it to filter history
for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do
sed -i "/${myRegex}/d" ${tmpFile}
done
# and copy it back to history file
mv ${tmpFile} ${HISTFILE}
}