Réexécutez plusieurs commandes d'historique

22

Imaginez que vous venez d'exécuter une douzaine de commandes. Dire...

$ cd foo/    # history cmd #10000 (my history is very long)
$ ... more commands ...
$ cd ../     # history cmd #10012 

Je sais que je peux les réexécuter concaténés avec !-12 && !-11 && !-10 && (and so on) && !!s'ils viennent d' être exécutés (peu probable) ou !10000 && !10001 && !10002 && (and so on), mais y a-t-il un moyen plus simple que de taper à la main chaque numéro d'historique avec un bang et des esperluettes?

Y a-t-il peut-être une sorte de plage que j'ignore dans bash?

par exemple !{10000-10012}# quelque chose comme ça, ne fonctionne que.

inanutshellus
la source

Réponses:

23

C'est à cela que sert la fccommande.

fc -12 -1

ou

fc 10000 10012

Ce n'est pas tout à fait ce que vous voulez car il lancera d'abord un éditeur, mais c'est probablement une bonne chose car cela vous donne la possibilité de vérifier que vous avez les bonnes commandes et même de les éditer en utilisant toutes les capacités de votre éditeur préféré. Une fois que vous avez enregistré vos modifications et quitté l'éditeur, les commandes seront exécutées.

jw013
la source
Ah hah! Brillant! fc. Corriger les commandes. Logique!
inanutshellus
1
Pour éviter de lancer un éditeur (dangereux!), Vous pouvez utiliserfc -e true -12 -1
BingsF
indisponible dans ubuntu
okwap
1
@okwap, un non-sens. Il est spécifié par POSIX et certainement disponible dans Ubuntu. (C'est un shell intégré, cependant - comme il doit l' être - donc si vous regardez /bindedans, vous ne le trouverez pas.)
Wildcard