Puis-je rechercher l'historique dans bash et exécuter le résultat ?
+1 J'utilise Linux depuis plus de 12 ans pour tous les systèmes. Je ne savais pas que cela existait. J'aimerais pouvoir +10 comment ai-je pu le manquer ?
Puis-je rechercher l'historique dans bash et exécuter le résultat ?
Type Ctrl R à la ligne de commande et commencez à taper la commande précédente. Dès qu'un résultat apparaît, continuez à taper Ctrl R pour voir d'autres correspondances. Lorsque la commande souhaitée apparaît, il suffit d'appuyer sur Enter
Notez que si Ctrl R est la valeur par défaut, si vous vouliez que la commande ( reverse-search-history
) à lier à Ctrl T vous pourriez configurer cela avec ce qui suit :
bind '"\\C-t": reverse-search-history'
Il existe toute une série d'autres commandes liables à readline qui sont également à votre disposition. Jetez un coup d'œil à la bash
page de manuel .
Bash dispose de nombreuses possibilités pour rechercher et accéder à l'historique des commandes interactives. La plus simple d'entre elles est la fonction history
intégré. Taper juste :
$ history
Imprime une liste de commandes avec un index numérique, par exemple :
$ history
1 clear
2 ls -al
3 vim ~/somefile.txt
4 history
$
Vous pouvez ensuite exécuter n'importe laquelle de ces commandes en utilisant leur index numérique en faisant précéder l'index d'un simple !
comme Mitch a souligné :
$ !1
Exécutera le clear
commande. Le module d'historique a lui-même de nombreuses fonctionnalités, vous pouvez en voir plus dans la section bash
y history
pages du manuel.
Vous pouvez également spécifier des décalages négatifs relatifs lorsque vous utilisez la commande !
donc, en utilisant notre liste d'historique ci-dessus, si nous voulions exécuter vim
encore une fois, nous pourrions le faire :
$ !-2
Ce qui revient à dire à bash d'exécuter la commande que vous avez lancée "il y a deux commandes". Pour exécuter la commande précédente dans la liste de l'historique, nous pouvons simplement utiliser !!
(qui est juste un raccourci pour !-1
).
El !
ne vous limite pas à spécifier numériquement la commande à exécuter. hayalci a montré que vous pouvez instruire bash
pour exécuter une commande en se basant sur le texte par lequel elle commence (avec l'option !
) ou du texte dans la commande elle-même (en utilisant !?
). De nouveau, en utilisant notre exemple de liste d'historique ci-dessus, si nous voulions exécuter clear
à nouveau, il suffit de taper :
$ !cl
et appuyez sur Enter . Et qu'en est-il vim
? C'est aussi simple que cela :
$ !?some
Le point le plus important de hayalci La réponse de l'entreprise est l'appel à la shopt
builtin :
$ shopt -s histverify
Cela activera la vérification de l'historique, de sorte que les commandes correspondant à l'option !
, !!
et !?
Les désignateurs ne sont pas exécutés aveuglément, mais remplis sur la ligne de commande afin que vous puissiez vous assurer qu'ils ne feront aucun mal avant de les exécuter. Ceci est encore plus important lorsque vous exécutez des commandes en tant qu'utilisateur root. Cette option peut être définie dans votre .bashrc
afin qu'il soit défini à chaque fois que vous vous connectez.
Comme on l'a déjà souligné, toutes ces informations peuvent être glanées dans la base de données de la Commission européenne. bash
page de manuel . Pour les indicatifs !, ! !, et ! ?, consultez la section 9.3 Expansion historique .
+1 J'utilise Linux depuis plus de 12 ans pour tous les systèmes. Je ne savais pas que cela existait. J'aimerais pouvoir +10 comment ai-je pu le manquer ?
Si quelqu'un devait consolider '!!', '!!', '!?', 'history | grep', et 'ctrl-r' dans une réponse complète, je la sélectionnerais.
Comme alternative à crtl+R vous pouvez rechercher l'historique en tapant
!text
Ceci recherchera dans l'historique la commande la plus récente. débutant avec "texte".
Mais je vous suggère de mettre ceci dans votre .bashrc pour éviter l'exécution d'une mauvaise commande.
shopt -s histverify
Ceci indique à bash que, après tout les actions de l'histoire (comme !!:s/prev_text/after_text
), il place la ligne résultante à l'invite de commande. Vous pouvez alors revoir ou modifier la commande, puis appuyer sur Entrée.
Je préfère utiliser history-search-backward plutôt que reverse-search-history. La première vous permet de taper quelques caractères de la commande puis appuyer sur la touche de recherche, plutôt que d'appuyer d'abord sur la touche de recherche puis de taper la chaîne de recherche.
Par défaut, sur mon système, M-p et M-n se lient à des fonctions similaires, mais je préfère lier les touches fléchées :
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
Excellent article, Sean ! Je l'aurais bien mis dans un commentaire, mais il me manque quelques points de réputation :-)
Une autre technique connexe et utile est la possibilité d'exécuter une commande précédente tout en modifiant un mot. Disons que vous avez fait une faute de frappe dans le nom du répertoire, ou que vous voulez changer le nom du fichier :
$ echo my name is bob
my name is bob
$ ^bob^jordan
echo my name is jordan
my name is jordan
Remarquez que la commande est développée, remplacée et affichée avant que la commande ne soit exécutée. Ainsi, si une mauvaise commande est exécutée, vous pouvez voir ce que bash pensait faire.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.