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