Exécuter une gamme de commandes à partir de l’historique

J’utilise Ubuntu et j’aimerais répéter plusieurs commandes que j’ai effectuées. J’ai essayé quelque chose comme

for i in $(seq 2006 2013); do \!$i; done; 

mais a échoué, car le shell tente d’exécuter une commande ‘! 2006’.

 man history 

ne m’a pas non plus révélé comment répéter une série de commandes.

Si vous utilisez bash (ou ksh ), la fonction intégrée fc vous permet de manipuler l’historique de différentes manières.

 fc -l # list recent history. fc -l 2006 2013 # list commands 2006..2013 fc 2006 2013 # launch editor with commands 2006..2013; executes what you save fc -e pico 2006 2013 # launches the editor pico on command 2006..2013 fc -e - 2006 2013 # Suppresses the 'edit' phase (but only executes the first listed command) fc -e : 2006 2013 # Launches the ':' command (a shell built-in) as the editor 

La technique classique de ksh est d’utiliser un alias alias r='fc -e -' , mais à cause du comportement de bash , il est nécessaire de tordre son arm un peu plus fort et d’utiliser un alias r='fc -e :' .

 for i in $(seq 2006 2013); do \!$i; done; 

dans votre code, vous pouvez penser! est comme ! en ligne de commande bash, mais ici “!” avec le “$ i”, devenez une chaîne de caractères comme la commande “! 2006,! 2007 …! 2013” mais en réalité il n’y a pas de commande nommée “! 2006” “! 2006” dans son intégralité est un nom de commande.

dans Bash! est un indicateur d’événement . quand vous utilisez! 2006. il est expliqué comme “référence à la commande 2006” mais ne pas utiliser la commande “! 2006”.

! est toujours de gauche à droite exécuter la commande.

Pour plus d’informations, veuillez visiter http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators

J’essaie la manière suivante pour obtenir le même résultat:

 for i in $(seq 2006 2013); do fc -e - $i; done;