Existe-t-il un meilleur moyen de rechercher une commande dans mon fichier historique que grep? J'ai une idée de la façon dont la commande commence, mais je ne sais pas jusqu'où elle remonte.
mise à jour: était auparavant spécifique à zsh mais en raison du chevauchement des réponses, n'hésitez pas à répondre pour n'importe quel shell (ou mode (vi/emacs)) ici, notez simplement s'il est spécifique.
Ctrl+R est généralement le meilleur moyen, comme dit le descripteur . Vous pouvez aussi utiliser !string
, qui exécute la commande la plus récente commençant par string
ou !?string?
, qui exécute la commande la plus récente qui contient string
.
(Je pense que c'est la seule chose pertinente à cette question, mais j'ai couvert beaucoup plus de commandes d'historique dans cette réponse )
Lorsque vous utilisez Bash, saisissez Control-R puis commencez à taper. Dactylographie Control-R à plusieurs reprises après avoir saisi du texte, vous reviendrez dans les lignes de commande correspondantes.
Je ne sais pas si cela vous aidera, mais j'aime utiliser ctrl-r puis commencez à taper la commande. Il devrait parcourir votre historique et vous présenter le premier match. Pour basculer entre les matchs, appuyez simplement sur ctrl-r encore.
Si vous ajoutez ce qui suit à ~/.inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward
et redémarrez Bash, vous pouvez commencer à taper, puis utiliser Page Up et Page Down pour reculer et avancer dans l'historique des lignes en commençant par le même préfixe que vous venez de taper.
(Certains peuvent préférer utiliser \e[A
et \e[B
, qui remplacera la normale Up et Down actions au lieu de lier de nouvelles clés.)
L'invite interactive invoquée par Ctrl-R, qui avait déjà été mentionné, est le moyen le plus pratique. De plus, il est populaire de remapper Up et Down touches fléchées pour rechercher dans l'historique un préfixe actuellement sur la ligne de commande, mais cela nécessite quelques modifications de la ~/.inputrc
fichier .
La solution classique et moins interactive consiste à utiliser l'expansion de l'historique de Shell. Dactylographie
!foo
exécutera la dernière commande commençant par foo
et
!?foo
exécutera la dernière commande contenant foo
. Plus d'informations sur l'expansion de l'historique peuvent être trouvées dans le Manuel de référence Bash , en supposant que votre Shell est Bash ou compatible.
Si vous ajoutez stty -ixon
à ton ~/.bashrc
fichier puis Ctrl-s ira dans la direction opposée à Ctrl-r.
Si vous tapez !ls
alors bash parcourra votre historique et exécutera la commande la plus récente commençant par "ls"
peut être spécifique à zsh. En recherchant cette réponse I trouvévi-history-search-backward
qui permet de rechercher avec / en mode vi (dont je n'ai pas mentionné que j'étais), vous pouvez ensuite utiliser n et N pour rechercher respectivement en avant et en arrière (après avoir appuyé sur enter).
Je suis surpris que cela n'ait pas été mentionné - mais vous pouvez sélectionner vi-mode en bash ou ksh en faisant ceci:
set -o vi
... ou en l'utilisant comme contenu de ~/.inputrc
(pour GNU readline utilisé dans des programmes tels que bash):
set editing-mode vi
Ensuite, vous pouvez utiliser Esc pour entrer mode commande et utiliser k pour revenir dans l'histoire, et j Aller de l'avant. Vous pouvez également rechercher en utilisant / pour rechercher normalement, et ? pour rechercher en sens inverse.
Si tu utilises ~/.inputrc
, alors cela fonctionnera non seulement dans GNU bash mais dans tout ce qui utilise GNU readline comme CLISP et éventuellement des programmes comme la commande MySQL Shell et comme le CPAN Shell.
Pour basculer vers l'avant lorsque vous utilisez la recherche inversée (avec la commande Ctrl-R):
Ouvrez votre fichier .bashrc:Sudo gedit ~/.bashrc
ajouter cette ligne (la lettre "f" peut être remplacée par une autre non encore utilisée par le système)
bind '"\C-f": forward-search-history'
source ~/.bashrc
ou . ~/.bashrc
MAINTENANT, VOUS POUVEZ AVANCER DANS L'HISTOIRE AVEC LE RACCOURCI: Ctrl + f
Travailler sur Ubuntu 18.04 LTS
J'utilise les deux suivants la plupart du temps.
Mais veuillez noter que les deux recherchent des caractères de départ.
fc -e - <SPACE>
<first few char for your previous >
cela exécutera la dernière commande correspondant à cette séquence.Je n'ai pas pu trouver quelque chose comme Ctrl+R dans Bash pour mon ksh et tcsh.
Il existe un moyen d'utiliser Ctrl-R avec tcsh. Ajoutez ce qui suit dans votre ~/.cshrc
:
bindkey "^r" i-search-back
(c'est juste un signe d'insertion et la lettre r)
C'est le plus gros gain de temps pour moi.
réponse similaire à @ephemient, mais vous pouvez mettre dans votre .bashrc
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'
et tapez une partie de la phrase, puis utilisez la flèche haut/bas pour parcourir les options les plus récentes qui correspondent. C'est le comportement par défaut de matlab.
Pour la plupart des gens, si vous souhaitez transférer vos paramètres vers un nouveau système, il est plus facile de vous rappeler de ne récupérer que votre ~/.bashrc
alors que vous devez accrocher cela ~/.inputrc
Oui, il existe, du moins si vous utilisez zsh. Commencez simplement à taper la commande, puis appuyez sur M-p (ESCp) et il trouvera les commandes précédentes qui correspondent à ce que vous avez tapé. Appuyez à nouveau pour trouver le match suivant.