332 votes

BASH - Comment utiliser les arguments de la commande précédente?

Je sais que ESC DOT vous donne le dernier argument de la dernière commande.

Mais je suis intéressé en premier argument de la dernière commande. Est-il une clé de liaison pour le faire?

Dans le même sens, est-il un générique façon de se nième argument de la dernière commande. (Je sais que dans un script bash, vous pouvez utiliser $0, $1, etc., mais ce n'est pas le travail sur la ligne de commande)

Aussi, qu'en parcourant 0e argument des commandes précédentes, comme nous pouvons le faire avec le dernier argument en continu en appuyant sur la touche ECHAP DOT

373voto

user1953081 Points 261

!$ obtient le dernier élément de l'argument de ligne de commande précédent.

304voto

Dennis Williamson Points 105818

Tout comme M-. (méta-point ou esc-dot ou alt-dot) est la fonction readline yank-last-arg, M-C-y (méta-contrôle-y ou esc ctrl-y ou ctrl-alt-y) est la fonction readline yank-nth-arg. Sans spécifier n, il ramène le premier argument de la commande précédente.

Pour spécifier un argument, appuyez sur echap et un certain nombre ou maintenez la touche Alt enfoncée et appuyez sur un numéro. Vous pouvez faire Alt--pour commencer à spécifier un nombre négatif, puis relâchez la touche Alt et appuyez sur le chiffre (ce sont décomptés à partir de la fin de la liste d'arguments.

Exemple:

Entrez la commande suivante

$ echo a b c d e f g
a b c d e f g

Maintenant, à la prochaine invite de commandes, tapez echo (avec un espace), puis

Appuyez sur Alt-Ctrl-y et vous verrez maintenant:

$ echo a

sans appuyer sur la touche Enter pourtant, procédez de la manière suivante

Appuyez sur Alt-3 Alt-Ctrl-y

Appuyez sur Alt-- 2 Alt-Ctrl-y

Maintenant, vous allez voir:

$ echo ace

En passant, t'aurais pu mettre la echo sur la ligne en sélectionnant l'argument 0:

Appuyez sur Alt-0 Alt-Ctrl-y

Edit:

Pour répondre à la question que vous avez ajouté à votre original:

Vous pouvez appuyer sur Alt-0 puis appuyez à plusieurs reprises sur la touche Alt-. pour parcourir les commandes précédentes (arg 0). De même, Alt-- puis en répétant Alt-. vous permettra de parcourir le précédent suivant-à-derniers arguments.

Si aucun argument sur une ligne particulière dans l'histoire, la cloche va sonner.

Si il y a une combinaison particulière que vous utilisez fréquemment, vous pouvez définir une macro afin que l'un frappe l'exécuter. Cet exemple permet de rappeler le deuxième argument de commandes précédentes en appuyant sur Alt-Maj-Y. Vous pourriez choisir la séquence de touches que vous préférez à la place de celui-ci. Vous pouvez appuyer plusieurs fois pour passer d'précédents.

Pour l'essayer, entrez la macro à l'invite Bash:

bind '"\eY": "\e2\e."'

Pour le rendre persistant, ajoutez cette ligne à votre ~/.inputrc le fichier:

"\eY": "\e2\e."

Malheureusement, cela ne semble pas fonctionner pour les arg 0 ou négatif argument des nombres.

162voto

larsmans Points 167484

Utilisez !:n pour obtenir le mot n de la ligne de commande précédente. !:0 est la commande, les arguments commencent à l'index 1.

 $ ls -l /
...
$ echo !:1
-l
 

63voto

Ajith Antony Points 194

J'ai tellement aimé @larsmans que j'ai dû apprendre davantage. Ajout de cette réponse pour aider les autres à trouver la section de la page de manuel et savoir quoi faire sur Google:

 $ man  -P 'less -p ^HISTORY\ EXPANSION' bash
<...>
Word Designators

Word designators are used to select desired words from the event.
A : separates the event specification from the word designator.
It may be omitted if the word designator begins with a ^, $, *, -,
or %.  Words are numbered from the beginning of the line, with the
first word being denoted by 0 (zero).  Words are inserted into the
current line separated by single spaces.

   0 (zero)
          The zeroth word.  For the shell, this is the command word.
   n      The nth word.
   ^      The first argument.  That is, word 1.
   $      The last argument.
   %      The word matched by the most recent ‘?string?' search.
   x-y    A range of words; ‘-y' abbreviates ‘0-y'.
   *      All of the words but the zeroth.
          This is a synonym for ‘1-$'.  
          It is not an error to use * if there is just one word in
          the event; the empty string is returned in that case.
   x*     Abbreviates x-$.
   x-     Abbreviates x-$ like x*, but omits the last word.

   If a word designator is supplied without an event
   specification, the previous command is used as the event.
 

18voto

Orbit Points 6928

! ^ peut être la commande pour le premier argument. Je ne sais pas s'il existe un moyen d'obtenir le nième.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X