201 votes

Recherche dans l'historique du Bash, partiel + flèche vers le haut

J'ai cherché, mais je n'ai rien trouvé à ce sujet. Je cherche une fonctionnalité dans bash, en utilisant un terminal.

Il y a longtemps, j'avais un utilisateur sur un système debian, et un ami m'a mis en place une fonction pratique de recherche dans l'historique (je crois que j'utilisais tcsh à l'époque), où je pouvais taper le début d'une commande précédente, appuyer sur la flèche vers le haut, et cela faisait une recherche, basée sur la chaîne partielle.

Par exemple, si mon histoire est :

./script.pl
./script.pl arg1
cat output
cat output | grep yada

Et je tape . et appuyez sur la flèche du haut, ça me montre : ./script.pl arg1 . Appuyez à nouveau sur la touche et l'écran affiche ./script.pl etc.

Comme s'il s'agissait d'un grep sur .bash_history. Existe-t-il un moyen d'obtenir cette fonctionnalité ?

262voto

Adam Points 6342

Créer ~/.inputrc et ajoutez ces lignes :

# Respect default shortcuts.
$include /etc/inputrc

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

TIP : Lisez en bas de page pour une explication de $include /etc/inputrc ou ce qu'il faut faire si vous avez déjà le fichier ~/.inputrc .

Les lignes commençant par # sont des commentaires.

Je n'arrive pas à me rappeler ce qui est en arrière et ce qui est en avant. Faites des essais. Vous devez peut-être passer de l'avant à l'arrière.

Fermez et rouvrez tous les terminaux pour que le nouveau comportement devienne effectif.


Un peu d'information de base :

Bash utilise ligne de lecture pour gérer l'invite. ~/.inputrc est le fichier de configuration pour readline. Notez que cela prendra également effet dans d'autres logiciels utilisant la bibliothèque readline, par exemple IPython .

Lire l'article manuel bash pour plus d'informations sur readline. Vous y trouverez également plus commandes de lecture en ligne liées à l'histoire .

Pour obtenir les codes d'échappement des touches fléchées, vous pouvez procéder comme suit :

  1. Début cat dans un terminal (juste cat , pas d'autres arguments).
  2. Tapez les touches du clavier, vous obtiendrez des choses comme ^[[A pour la flèche vers le haut et ^[[B pour la flèche vers le bas.
  3. Remplacer ^[ con \e .

Pour plus d'informations sur ^[ y \e voir ici : https://unix.stackexchange.com/a/89817/380515


A propos de la ligne $include /etc/inputrc :

Readline essaie de lire ~/.inputrc pour la configuration. Si ce fichier n'existe pas, il essaiera de lire le fichier suivant /etc/inputrc . Cela signifie que si ~/.inputrc existe, il ne lira pas /etc/inputrc .

Certaines distributions ont préparé une configuration dans /etc/inputrc . Si vous créez ensuite ~/.inputrc vous perdrez la configuration préparée. Cela peut être ou ne pas être ce que vous voulez. Pour conserver la configuration préparée dans /etc/inputrc vous pouvez utiliser la ligne $include /etc/inputrc dans votre ~/.inputrc .

Si vous avez déjà le fichier ~/.inputrc cela signifie que soit vous savez déjà ce que vous faites. Soit vous en avez hérité de la personne qui a mis en place votre système. Soit vous avez suivi un autre guide qui vous a dit de créer le fichier et vous l'avez oublié. Dans tous les cas, vous pouvez vérifier /etc/inputrc et décidez si vous voulez le garder avec la ligne $include /etc/inputrc .

44voto

user287613 Points 441

Créez un fichier nommé setup_readline.sh avec le mode 644 dans /etc/profile.d/ avec le contenu suivant, connectez-vous et vérifiez vos clés préférées :

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

Je pense que c'est la meilleure façon de faire. Surtout si vous utilisez des systèmes de gestion de configuration tels que chef, Puppet, etc.

Et la configuration du système n'a pas été modifiée !

15voto

John Wagenleitner Points 6206

Ctrl + R vous donnera ce genre de fonctionnalité. Commencez à taper une commande partielle et il apparaîtra d'anciennes commandes que vous pouvez parcourir avec les flèches haut et bas.

Plus d'informations aquí .

5voto

bcag2 Points 379

Pour compléter la réponse de Lesmana concernant ~/.inputrc que je devrais créer sous mon Trusty 14.04, vérifier/ajouté en ~/.bashrc (la première ligne existe déjà dans mon ~/.bashrc ):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

C'est déjà expliqué en français aquí .

3voto

Martin Dvorak Points 201

Vous pouvez peut-être essayer https://github.com/dvorka/hstr qui fournit un filtrage simple et multi-lignes de l'historique de Bash qui est basé sur une métrique (quand, combien de fois et la longueur des commandes importe) - vous pouvez utiliser les touches fléchées pour naviguer facilement dans l'historique :

enter image description here

Il peut être facilement lié a Ctrl-r y/o Ctrl-s

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X