142 votes

Historique de Bash sans numéros de ligne

La fête history La commande est très cool. Je comprends pourquoi elle affiche les numéros de ligne, mais existe-t-il un moyen d'invoquer la commande d'historique et de supprimer les numéros de ligne ?

Le but ici est d'utiliser la commande d'historique, donc s'il vous plaît ne répondez pas cat ~/.bash_history

Sortie de courant :

  529 man history
  530 ls
  531 ll
  532 clear
  533 cd ~
  534 history

Source graphique historique.

Sortie souhaitée :

man history
ls
ll
clear
cd ~
history

Source graphique historique.

Merci à tous pour vos excellentes solutions. Celle de Paul est la plus simple et fonctionnera pour moi car la taille de mon historique de bash est fixée à 2000.

Je voulais aussi partager un article sympa que j'ai trouvé ce matin. Il propose quelques bonnes options que j'utilise maintenant, comme le fait de garder les entrées dupliquées hors de l'historique de bash et de s'assurer que les sessions multiples de bash n'écrasent pas le fichier d'historique : http://blog.macromates.com/2008/working-with-history-in-bash/

3 votes

Puis-je demander pourquoi cat ~/.bash_history est exclue ?

1 votes

@flow2k parce que c'est l'historique sauvegardé, (de la dernière sortie du shell), PAS l'historique actuel !

0 votes

@anthony tu peux courir history -a d'abord pour sauvegarder votre historique actuel

224voto

Paul R Points 104036

Essayez ça :

$ history | cut -c 8-

0 votes

Peut-on faire passer la sortie du history au lieu de lire le fichier ?

0 votes

Cela semble fonctionner ! Pouvez-vous expliquer ce qu'il fait ? Cela fonctionnera-t-il si les nombres sont de 1 à 10 000 ?

0 votes

C'est assez rudimentaire - vous pouvez probablement faire mieux avec sed ou awk. cut ici, il suffit de supprimer les 7 premiers caractères de chaque ligne.

24voto

Zsolt Botykai Points 20615

awk peut vous aider :

history|awk '{$1="";print substr($0,2)}'

Cette réponse peut échouer si vous avez une longue histoire.

0 votes

Ha Ha, merci - substr est tellement plus simple, j'ai utilisé history | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}' pour la mine !

18voto

Att Righ Points 596

Je suis tout à fait conscient que cette question concerne bash et que de nombreuses personnes préféreraient ne pas passer à zsh (signal des votes négatifs...).

Cependant, si vous étiez prêt à passer à zsh alors zsh supporte cela nativement (ainsi que d'autres options pour le formatage de l'historique)

zsh> fc -ln 0

(Voir https://serverfault.com/questions/114988/removing-history-or-line-numbers-from-zsh-history-file )

15voto

czerny Points 51
history -w /dev/stdout

A partir de la sortie de history --help :

-w écrire l'historique actuel dans le fichier historique

Il écrit l'historique actuel dans le fichier spécifié - /dev/stdout dans ce cas.

11voto

iMil Points 66

Je suis en retard sur ce point, mais la méthode la plus courte serait d'ajouter ce qui suit dans votre fichier ~/.bashrc o ~/.profile fichier :

HISTTIMEFORMAT="$(echo -e '\r\e[K')"

De bash manpage :

       HISTTIMEFORMAT
              If this variable is set and not null, its value is used as a
              format string for strftime(3) to print the time stamp associated
              with each history entry displayed by the history builtin.  If
              this variable is set, time stamps are written to the history
              file so they may be preserved across shell sessions.  This uses
              the history comment character to distinguish timestamps from
              other history lines.

En utilisant cette capacité, un hack intelligent consiste à faire en sorte que la variable "imprime" un retour chariot ( \r ) et effacer la ligne (code ANSI K ) au lieu d'un horodatage réel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X