Comment passer en revue la recherche inversée dans BASH?


446

Dans le terminal, je peux taper CTRL-Rpour rechercher une commande correspondante précédemment saisie dans BASH. Par exemple, si je tape CTRL-Ralors, grepma dernière grepcommande est listée et je peux appuyer sur Entrée pour l'utiliser. Cela ne donne qu'une suggestion cependant. Existe-t-il un moyen de parcourir d’autres commandes correspondantes précédemment typées?

Réponses:


600

Si je comprends bien la question, vous devriez pouvoir parcourir les différentes alternatives en frappant plusieurs fois Ctrl+R.

Par exemple:

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

Cela cherche en arrière dans votre histoire. Pour rechercher à la place, utilisez plutôt, Ctrl+Smais vous devrez peut-être définir: stty -ixon(soit .bash_profilemanuellement, soit auparavant) pour désactiver la fonction XON / XOFF qui prend le relais Ctrl+s. (Plus de détails ici .)


23
+1 - Pour votre information - vous pouvez également rechercher en avant conformément à cette réponse StackOverflow .
— Jordan Arseno

7
Et utilisez Ctrl + Maj + r pour faire défiler en arrière si vous passez.
— Wiswit

19
@wiswit CTRL+SHIFT+rne fonctionne pas pour moi.
— Maxim Suslov

9
@MaximSuslov Voir cette question: stackoverflow.com/questions/791765/… Vous pouvez ajouter [[ $- == *i* ]] && stty -ixonà votre fichier .bashrc puis CTRL+sagir à l'inverse deCTRL+r
— gla3dr

9
@JordanArseno J'ai pris "recherche en avant" pour "recherche de commandes que je n'ai pas encore tapées"
— Josh Johnson

235

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

commande #useful

ensuite

ctrl+r #useful

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


5
D'habitude j'aime bien ce genre de marquage. #trg_bld #open_log
— Makesh le

1
où ajouter cette balise?
— Sudip Bhandari

5
@SudipBhandari juste après votre commande. # commence un commentaire. Par exemple, ls -lah #useful
— Andrei

1
Unix avait des hashtags avant que ce soit cool :)))
— Bobby Marinoff

47

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 je lance ces commandes:

$ ls bart
$ ls fools

puis tapez lset appuyez Updeux fois sur, il montrera ls bartet le curseur au même endroit. Comparez avec Ctrl- r, où il trouverait le lsdouble de la dernière ligne, vous devrez donc appuyer à nouveau pour trouver la ligne précédente.

Ces deux approches ont leurs points forts et permettent d’économiser beaucoup de temps.


2
C'est également standard sur OS X, vous n'avez donc pas besoin de créer ~/.inputrcet d'ajouter ces deux lignes.
— DASKAjA

1
Comme Falconepi l'a écrit dans les commentaires de cette réponse , sur Ubuntu, il vous suffit de commenter ~/.inputrcles deux lignes, y compris history-search- *
— Arpad Horvath

Vous pouvez également consulter ce post pour plus de détails sur cette réponse: codeinthehole.com/writing/…
— Andrei

Ce n'était pas standard sur mon macOS (10.13). J'ai toujours manqué cette fonctionnalité!
— Versout

Une bonne chose à ce sujet est que vous pouvez toujours utiliser ctrl-p / ctrl-n pour parcourir régulièrement l'historique
— elig le

0

Il existe un remplacement pour intégré Ctrl + Rappelé 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:

Exemple

Voici un screencast de démonstration .

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

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

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

Et ensuite utiliser Ctrl + R(après réouverture du terminal).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.