web-dev-qa-db-fra.com

Comment faire défiler la recherche inversée en BASH?

Dans le terminal, je peux taper CTRL-R pour rechercher une commande correspondante précédemment tapée dans BASH. Par exemple, si je tape CTRL-R alors grep is liste ma dernière commande grep, et je peux appuyer sur Entrée pour l'utiliser. Cela ne donne cependant qu'une seule suggestion. Existe-t-il un moyen de parcourir d'autres commandes de correspondance précédemment saisies?

505
Village

Si je comprends bien la question, vous devriez pouvoir parcourir les alternatives en appuyant plusieurs fois sur Ctrl+R.

Par exemple.:

Ctrl+R grep Ctrl+RCtrl+R ...

Cela recherche en arrière dans votre historique. Pour effectuer une recherche vers l'avant à la place, utilisez Ctrl+S, mais vous devrez peut-être avoir défini: stty -ixon (soit par .bash_profile ou manuellement) avant cela pour désactiver la fonction XON/XOFF qui prend le relais Ctrl+s. (Plus de détails ici .)

656
Runium

Si vous pensez que la commande sera utilisée fréquemment, vous pouvez ajouter une balise

commande #useful

Alors

ctrl+r #useful

Cela fonctionne parce que # est un délimiteur de commentaire, c'est-à-dire que tout ce qui vient après le symbole n'est pas interprété comme une commande. Cependant, il sera enregistré dans l'histoire et est donc consultable.

250
Sathyam

Vous pouvez également configurer les flèches haut et bas pour effectuer une recherche légèrement différente en ajoutant ces lignes à ~/.inputrc:

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

Au lieu de rechercher une sous-chaîne n'importe où dans la commande (comme Ctrl-r ) il recherchera une commande commençant par le texte à gauche du curseur . Par exemple, si j'exécute ces commandes:

$ ls bart
$ ls fools

puis tapez ls et appuyez sur Up deux fois, il affichera ls bart et le curseur au même endroit. Comparer avec Ctrl-r, où il trouverait le ls deux fois dans la dernière ligne, vous devrez donc appuyer à nouveau pour trouver la ligne précédente.

Ces approches ont toutes deux leurs points forts et peuvent toutes les deux gagner beaucoup de temps.

48
l0b0

Il y a un remplacement pour intégré Ctrl + R appelé hstr . Il permet de rechercher l'historique des commandes correspondant à tous les jetons de recherche en même temps (entre autres), et de parcourir les résultats à l'aide des touches fléchées:

Example

Voici un screencast de démonstration .

Il peut être installé sur un système d'exploitation de la famille Debian comme:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

Et puis utilisez Ctrl + R (après réouverture du terminal).

3
saaj