Comment naviguer de manière sélective dans l'historique des commandes Bash sur un terminal Linux [doublon]

9

Tout le monde sait (ou devrait savoir!) Que sur un terminal les touches fléchées haut et bas sont utilisées pour naviguer dans l'historique des commandes utilisées.

Lorsque vous utilisez le terminal quotidiennement, votre historique de commandes sera probablement une longue liste de nombreuses commandes différentes, ce qui rendra la navigation moins facile. À titre d'exemple, disons qu'il y a un mois, j'ai utilisé le iwconfigavec un ensemble déterminé de paramètres (comme je l'ai dit, ce n'est qu'un exemple, je n'ai pas besoin de jouer avec lui pour le moment), comment puis-je me souvenir de cette commande particulière avec tous ses arguments et paramètres sans avoir à revenir en arrière à travers des centaines de commandes d'historique?

Je sais que je pourrais utiliser historypour avoir une liste des commandes précédemment utilisées et !npour réexécuter la commande n sur ladite liste, mais lorsque l'historique devient grand, ce n'est pas très pratique aussi.

L'idéal serait d'avoir quelque chose qui me permette d'utiliser un raccourci clavier pour naviguer dans l'historique mais seulement entre les instances qui contiennent ce que j'ai déjà tapé sur la ligne de commande; donc dans mon exemple, après avoir tapé iwconfig, utilisez quelques touches (peut-être PgUp et PgDown?) pour naviguer uniquement à travers les entrées qui commencent par iwconfig .

Si ce n'est pas possible, il serait également bien d'imprimer une liste comme historydo mais qui ne contiendra que ce que j'ai déjà tapé (je soupçonne que historyet la grepcommande sont impliquées mais je ne suis pas sûr de la syntaxe correcte); mais la solution de raccourci clavier précédente serait la meilleure option.

Sekhemty
la source

Réponses:

12

Vous pouvez rechercher l'historique à l'aide de Ctrl+ Rpuis taper la chaîne de recherche (par exemple iwpour trouver iwconfig). Ensuite, vous pouvez toujours parcourir l'historique à ce point avec les touches fléchées haut et bas, ou appuyez à nouveau sur Ctrl+ Rpour rechercher l'occurrence précédente.

Stefan Seidel
la source
Je ne suis pas sûr d'avoir bien compris ça marche. Si j'appuie sur Ctrl + R et tape iwconfig, cela me montre une instance qui la contient (pas nécessairement la plus récente), mais si j'utilise les touches fléchées, elle parcourt tous les éléments, pas seulement ceux qui contiennent la chaîne. Il me semble qu'il sélectionne un point spécifique de l'histoire pour commencer la navigation (au lieu de commencer par le bas comme le fait la touche haut), mais à part cela, la navigation est la même que toujours. Ai-je oublié quelque chose?
Sekhemty
Je pense que cela n'a pas d'importance du tout, mais juste au cas où, j'utilise l' konsoleémulateur de terminal.
Sekhemty
Désolé, j'ai mis à jour ma réponse sur la façon de trouver les matchs précédents.
Stefan Seidel
5

Après un peu de pratique, j'ai trouvé comment utiliser la solution de contournement.

J'ai fait correspondre la syntaxe correcte pour imprimer une liste filtrée, je l'ai fait avec history | grep iwconfig(ce n'était pas si difficile après tout); avec la sortie que je peux utiliser !navec la liste filtrée désormais facile à lire.

Sekhemty
la source
3
Une astuce supplémentaire: utiliser !n:p. Cela imprime l'ancienne commande sans l'exécuter et la remet dans votre historique. Ensuite, allez-y avec un seul coup de flèche vers le haut et maintenant vous pouvez le modifier. Il y a beaucoup d'autres astuces idiotes comme celle-ci: ss64.com/bash/history.html
Wandering Logic
3

Je ne peux pas commenter la réponse de Stefan, mais vous devez normalement continuer à appuyer sur Ctrl + R. Consultez cette page pour plus d'informations.

user2313067
la source
2

Appuyez sur "ctrl + r" puis entrez la chaîne de recherche.

Si ce n'est pas celui que vous recherchez, puis à nouveau "ctrl + r"

S'il est trouvé, appuyez sur Entrée pour l'exécuter Ou appuyez sur la flèche droite -> pour le modifier avant de l'utiliser.

Santosh
la source