Comment vous souvenez-vous du dernier (n-ième?) Argument passé de la commande précédente que vous avez utilisée avec bash?

9

Souvent, j'émets différentes commandes sur le même fichier. Par exemple:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

Existe-t-il un moyen de réutiliser les arguments de la commande précédente dans le courant afin de ne pas avoir à le réécrire?

badp
la source

Réponses:

15

alt-.est certainement agréable, mais si vous savez déjà quel argument numéroté vous voulez, vous pouvez être plus rapide: !:nc'est le nth argument de la commande précédente.

Il est souvent utile de combiner cela avec un espace magique. Pour activer cela, insérez votre .inputrc Space: magic-space. Lorsque cette option est activée, lorsque vous tapez un espace après !:2, il sera immédiatement étendu à sa valeur au lieu d'attendre que vous appuyiez sur Entrée. Vous évite de saisir accidentellement le mauvais argument.

Cascabel
la source
9

En bash, vous pouvez utiliser le raccourci Alt+ ..
Le frapper une fois, vous donnera le dernier argument. Si vous le frappez plus, vous passerez par vos derniers arguments.

Christian
la source
4

En bash, le désignateur du "dernier mot sur la ligne de commande précédente" est !!$:

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

Vous pouvez également utiliser la "syntaxe caret" pour remplacer la partie initiale de la ligne de commande; cela est pratique si vous souhaitez exécuter plusieurs commandes sur le même fichier:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

Il y a beaucoup plus de possibilités; voir "Substitution d'historique" dans la page de manuel bash (1) pour plus de détails.

Riccardo Murri
la source
Cette syntaxe caret est en fait plus lente que d'appuyer sur la flèche vers le haut et de modifier la ligne de commande vous-même ...
badp
1
!!$peut aussi être écrit !$.
Mikel
3

En bash, vous pouvez également utiliser $ _ pour le dernier argument de ligne de commande de la dernière commande que vous avez tapée:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

devient:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_
fschmitt
la source
0

Une méthode relativement lente consiste à rappeler la commande précédente avec et à remplacer la commande précédente par la plus récente.

badp
la source
J'espère quelque chose de plus rapide :)
badp