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?

Village
la source

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 .)

Runium
la source
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.

Sathyam
la source
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.

l0b0
la source
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).

saaj
la source