GNU/Linux >> Linux Esercitazione >  >> Linux

Come escludere il comando dall'elenco della cronologia, ma mantenerlo nella cronologia "live"?

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}
}

Linux
  1. Come usare il comando cronologia in Linux

  2. Come cancellare la cronologia di Bash su Linux

  3. Come cancellare un comando specifico dalla cronologia di Bash in Linux

  4. Qual è il modo per evitare che un comando venga aggiunto alla tua storia?

  5. Escludi elenco di file da find

Come utilizzare il comando cronologia di Linux

Come utilizzare il comando SS di Linux

Come visualizzare eventi significativi nella storia del mondo dalla riga di comando

Come rimuovere un comando dalla cronologia in Linux

Come elencare i dischi su Linux

Come elencare solo le directory in Linux