Supposons que je veuille exécuter une séquence de quatre commandes que j'ai déjà exécutées. Si le premier est 432 dans l'historique des commandes, je pourrais faire:
$ !432; !433; !434; !435
Je suis curieux de savoir s'il existe un moyen plus efficace d'y parvenir.
bash
command-line
command-history
Eric Wilson
la source
la source
history -p \!43{2..5}
d'imprimer des commandes 432 par 435 au terminal, adapté pour la copie ultérieure / coller.Réponses:
Si cela fait référence à des commandes exécutées récemment, un moyen plus efficace consiste à les référencer avec des nombres négatifs:
De plus, une fois que vous aurez fait cela, votre dernière entrée d'historique contiendra toute la chaîne de commandes afin que vous puissiez la répéter avec
!!
.Edit: Si ce n’est déjà fait, familiarisez-vous avec la superbe fonction intégrée
fc
, mentionnée par Gilles . (Utilisezhelp fc
.) Il s’avère que vous pouvez également utiliser des nombres négatifs pour pouvoir faire la même chose que ci-dessus en utilisantCela a cependant une mise en garde: après cela, la
eval
ligne est stockée dans l'historique en tant que dernière commande. Donc, si vous recommencez, vous tomberez dans une boucle!Une méthode plus sûre consiste à utiliser le
fc
mode de fonctionnement par défaut : transférer la plage de commandes sélectionnée vers un éditeur et les exécuter une fois que vous en sortez. Essayer:Vous pouvez même inverser l'ordre de la plage de commandes:
fc -1 -4
la source
Pour afficher une gamme de commandes dans l'historique, utilisez la
fc
commande intégrée :Pour les exécuter à nouveau:
la source
man fc
ne me donne rien. Que veut direfc
? Quelles sont les autres options?help fc
... et aussihelp help
.... help: help [-dms] [pattern ...] Affiche des informations sur les commandes intégrées.-l
drapeau, il exécutera sans avoir besoin de la perversitéeval
.fc
signifie "find command" ou "fix command".Il existe un moyen intéressant et alternatif d'exécuter plusieurs commandes en séquence à partir de l'historique Bash:
au lieu d'utiliser substitut d'historique (
!432
ou!-4
), vous pouvez parcourir l'historique avec Ctrl+ r, et une fois que vous avez trouvé la première commande à utiliser run, tapez Ctrl+ o( operation-and-get-next ) à la place de la returnclé.Ceci lancera la commande et proposera la suivante à partir de l'historique. Vous pouvez appuyer Ctrl+osur autant de fois que vous le souhaitez et mettre fin à la séquence, soit returnpour une dernière fois, soit Ctrl+cpour vous arrêter sans la lancer.
la source
Ctrl-o
il ne fait que sortir un littéral^o
et me brise(reverse-i-search)
. Peut-être y a-t-il un autre paramètre impliqué.Pour exécuter les commandes immédiatement plutôt que de les éditer, voici une version syntaxiquement plus fine de la réponse de Giles à l'aide de eval :
L'argument deux-points à -e est le bash noop, ce qui a pour effet de sauter l'étape "ouvrir dans un éditeur" que fc veut. En outre, l'historique (récent) contiendra les commandes réelles de l'historique, plutôt que l'instruction eval.
la source
fc
pour la boucle etxsel
Cela fonctionne bien lorsque je veux concaténer et réexécuter les n dernières commandes plusieurs fois:
Ensuite:
Ou pour des commandes plus volumineuses nécessitant éventuellement des modifications:
la source