Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/12/2014, à 13:04

yoles

Effacer les répétitions de l'historique du terminal

Bonjour,

Je voulais savoir s'il y avait une technique qui, lorsque je tape une commande dans le terminal, efface de l'historique cette même commande si elle a déjà été entrée.

J'aimerais en fait que la commande saisie se retrouve en dernière position dans l'historique (donc en première position lorsque l'on utilise la flèche du haut) et que l'ancienne entrée soit supprimée. Cela me faciliterait grandement l'utilisation de l'historique de commande avec les flèches directionnelles.

Merci d'avance pour toute aide.

Dernière modification par yoles (Le 25/12/2014, à 13:07)

Hors ligne

#2 Le 25/12/2014, à 13:23

yoles

Re : Effacer les répétitions de l'historique du terminal

Problème réglé avec l'affectation "erasedups" à la variable HISTCONTROL.

Dernière modification par yoles (Le 25/12/2014, à 13:25)

Hors ligne

#3 Le 25/12/2014, à 14:10

f.x0

Re : Effacer les répétitions de l'historique du terminal

Bonjour,

pour celles et ceux qui voudraient faire pareil,
la commande à entrer en terminal est :

export HISTCONTROL=erasedups

SOPI

Hors ligne

#4 Le 25/12/2014, à 15:02

yoles

Re : Effacer les répétitions de l'historique du terminal

Bonjour, cette solution n'est pas pratique. En effet, elle ne modifie que temporairement la variable HISTCONTROL. J'ai donc modifié la variable HISTCONTROL dans mon fichier .bashrc. Maintenant, bien que la variable HISTCONTROL a la bonne valeur à chaque démarrage du terminal, le problème c'est qu'à chaque démarrage c'est le fichier .bash_history qui est chargé et en utilisant la flèche du haut on retrouve tous les doublons car toutes les commandes sont bien enregistrées sur ce fichier quelle que soit la valeur de la variable HISTCONTROL.

Mon intention était de supprimer définitivement tous les doublons de telle sorte que chaque fois que j'ouvre le terminal je me retrouve avec un historique purgé des doublons.

À moins qu'il y ait une solution plus simple pour résoudre mon problème, j'ai pensé à un script qui remplacerait le fichier .bash_history par l'historique temporaire de la session courante à chaque fermeture du terminal. Cela est-il réalisable ? Si oui pouvez-vous m'indiquer comment procéder ?

Merci d'avance pour toute aide.

Dernière modification par yoles (Le 25/12/2014, à 15:06)

Hors ligne

#5 Le 25/12/2014, à 17:41

yoles

Re : Effacer les répétitions de l'historique du terminal

J'ai fini par trouver un code grâce à des recherches google que j'ai adapté à ce que je voulais tel qu'expliqué précédemment. J'ai ajouté ce code à la fin du fichier .bashrc qui se trouve dans le répertoire utilisateur. Voici ce code :

cp $HOME/.bash_history $HOME/.bash_historyTMP
nl $HOME/.bash_historyTMP | sort -r --key 1 --numeric-sort | sort --key 2 --unique | sort --key 1 --numeric-sort | cut --fields 2 > $HOME/.bash_history

Si vous avez quelques conseils ou remarques afin d'optimiser ce code je suis preneur.

Merci d'avance.

Dernière modification par yoles (Le 25/12/2014, à 17:43)

Hors ligne

#6 Le 25/12/2014, à 19:19

pingouinux

Re : Effacer les répétitions de l'historique du terminal

Bonsoir,
Tu peux simplifier un peu la commande (la clé 1 n'a pas besoin d'être précisée dans ce cas)

nl $HOME/.bash_historyTMP | sort -r --numeric-sort | sort --key 2 --unique | sort  --numeric-sort | cut --fields 2 > $HOME/.bash_history

ou même (plus concis, mais moins lisible)

nl $HOME/.bash_historyTMP | sort -rn | sort -uk2 | sort -n | cut -f2 > $HOME/.bash_history

Hors ligne

#7 Le 25/12/2014, à 20:09

yoles

Re : Effacer les répétitions de l'historique du terminal

Merci c'est impeccable.

Hors ligne

#8 Le 26/12/2014, à 10:44

Ferod

Re : Effacer les répétitions de l'historique du terminal

Bonjour
Je n'arrive pas à comprendre si l'ordre est important pour toi kiyomi. Car je pense que tu peux utiliser la commande uniq pour supprimer les doublons consécutifs. Du coup si tu veux supprimer tous les doublons d'un fichier il te faut taper :

sort $HOME/.bash_historyTMP | uniq > $HOME/.bash_history

Par contre dans ce cas là tu perds l'ordre mais tu as vraiment un fichier qui contient que des commandes uniques.
Autre possibilité :

uniq $HOME/.bash_historyTMP > $HOME/.bash_history

Dans ce cas là tu conserve l'ordre du fichier. Par contre tu ne supprimes que les doublons consécutifs.


Par exemple un fichier qui contient :

toto1
toto2
toto2
toto1
toto1
toto1
toto2

sort fichierTest | uniq
toto1
toto2
uniq fichierTest 
toto1
toto2
toto1
toto2

"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich

Hors ligne

#9 Le 26/12/2014, à 16:03

yoles

Re : Effacer les répétitions de l'historique du terminal

Bonjour Ferod,

L'ordre est important pour moi dans le sens où je veux que les dernières commandes tapées se retrouvent à la fin du fichier .bash_history (afin qu'elles soient proposées en premier avec la flèche du haut) tout en supprimant dans l'historique l'ensemble des commandes identiques qui ont déjà été saisies.

Dans ces conditions, je me retrouve avec un historique concis où je n'ai qu'à utiliser la flèche du haut pour retrouver rapidement les commandes que j'utilise le plus souvent car elles seront toujours dans les premières suggestions, les commandes que je n'utilise que rarement finiront par se retrouver dans les dernières suggestions. Ce que tes propositions ne permettent pas de faire.

Dernière modification par yoles (Le 26/12/2014, à 16:10)

Hors ligne