GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exclure une commande de la liste de l'historique, mais la conserver dans l'historique "en direct" ?

Entre-temps, j'ai réussi à garder mon historique beaucoup plus propre grâce aux excellents conseils de vos gars concernant le HISTIGNORE option dans .bashrc , en omettant tous ces ll inutiles ou df -k lignes.

Cependant, j'ai aussi appris que le HISTIGNORE l'option est très restrictive , aussi.
Par exemple, si vous avez une ligne comme celle-ci (simplifiée)

HISTIGNORE='ll*:la*:cd*'

vous ne les ferez pas seulement exclure de la liste , mais aussi de votre "historique en direct" car j'aimerais doubler l'historique volatile auquel vous pouvez accéder via Curseur vers le haut /Curseur vers le bas . Essayez-le :ils seront entièrement omis maintenant, quelle que soit la durée de votre parcours dans l'historique des commandes avec lesdites touches de curseur.

Cependant, parfois je fait besoin de ces lignes, surtout avec des chemins très longs et compliqués que je ne veux pas retaper. Par contre, j'aimerais avoir ces lignes exclusives à mon historique en direct et ne pas les stocker dans la liste de l'historique car ils changeront fréquemment.

Existe-t-il un moyen d'y parvenir ?

En guise d'autre remarque, j'ai compris que pour une raison quelconque, l'historique "en direct" et la liste d'historique pouvaient parfois différer beaucoup (cf. Pourquoi j'obtiens des résultats différents avec le même utilisateur et la commande history).

Réponse acceptée :

Vous pouvez utiliser HISTIGNORE variable d'environnement.

Une liste de modèles séparés par deux-points utilisée pour décider quelles lignes de commande doivent être enregistrées dans la liste d'historique. Par exemple :

export HISTIGNORE="cd*:ls*"

cela ignorera toutes les commandes cd et ls de l'historique.

MODIFIER :

désolé, lors de ma première lecture, je n'ai pas pris suffisamment soin de votre question. Au fait, vous avez raison :HISTIGNORE est un paramètre très difficile, et bash_history ignorera simplement chaque commande répertoriée dans cette variable (il l'ignorera au moment où vous l'exécuterez, s'il existe déjà des entrées avec ces commandes dans votre HISTFILE ils seront trouvés par recherche inversée dans l'historique.

Pour répondre d'abord à votre dernière question, l'histoire en direct et écrite peut varier beaucoup si vous utilisez différents terminaux simultanément. Vous pouvez essayer une solution comme décrit ici :

Conserver l'historique bash dans plusieurs fenêtres de terminal

Ce que vous pourriez imaginer est une solution dans laquelle vous utilisez une fonction dans votre ~/.bash_logout fichier, ce qui effacera les entrées d'historique que vous ne voulez pas.

quelque chose comme ça devrait faire ce que vous voulez :

 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. Comment effacer une commande spécifique de l'historique Bash sous Linux

  2. Comment exclure certaines tailles de fichiers de la copie sous Linux

  3. Comment gérer votre historique de commandes Linux

  4. Comment désactiver la modification de mon historique dans bash

  5. Exclure la liste des fichiers de la recherche

Comment utiliser la commande Linux history

Comment utiliser la commande Linux SS

Comment afficher les événements importants de l'histoire du monde à partir de la ligne de commande

Comment supprimer une commande de l'historique sous Linux

Comment lister les disques sous Linux

Comment lister uniquement les répertoires sous Linux