Dans Bash, il existe des opérateurs pratiques pour répéter des parties de la dernière commande:
!^
se développe au premier argument de la commande précédente, par exemple,$ echo one "two three" one two three $ echo !^ echo one one
!$
se développe jusqu'au dernier argument de la commande précédente, par exemple,$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
se développe à tous les arguments de la commande précédente, par exemple,$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(Pour autant que je sache, ce sont du sucre syntaxique pour !!:^
, !!:$
et !!:*
respectivement, où se !!
trouve un désignateur d'événement qui se développe à la commande précédente, et ^
, $
et *
sont des désignateurs de mots, voir le manuel de référence Bash ou man bash
.)
Ce sont souvent très pratiques. Mais cela devient encore plus cool avec des raccourcis clavier:
Lorsque vous appuyez sur Alt+ .ou Alt+ _, le dernier argument de la commande précédente est inséré dans la commande actuelle, de la même manière que si vous aviez écrit
!$
à ce stade.Il est également possible d'appuyer sur Alt+ Ctrl+ ypour insérer le premier argument de la commande précédente, comme si vous l'aviez écrit
!^
à ce moment-là.
(Voir la bibliothèque GNU Readline ou info readline
.)
J'ai tendance à préférer les raccourcis clavier aux opérateurs d'historique de Bash, car je peux voir ce que j'insère avant d'exécuter la commande. Cependant, il ne semble pas y avoir de raccourci qui me permette d'insérer tous les mots de la commande précédente, c'est-à-dire celui qui fait !*
l'affaire. Au moins, je ne pouvais pas le trouver.
Existe-t-il un tel raccourci? Sinon, est-il possible de configurer la bibliothèque readline pour en ajouter une, et comment?
zsh
, si vous tapez echo !*
et appuyez sur TAB, vous obtenez l'effet souhaité. En général, TAB en ligne de lecture étendra tous les éléments extensibles. Très utile; bash aura probablement une configuration au même effet? @Seth, je pense que c'est la ligne de lecture dans bash, pas l'émulateur de terminal - pas sûr cependant.
man bash
(quelque part sur la ligne 3030)
\e.
et \e_
sont mappés à la fonction readline yank-last-arg
et \e\C-y
sont mappés à yank-nth-arg
. Malheureusement, il ne semble pas y avoir de commande (unique) qui ajoute plusieurs arguments précédents à la fois.