Exécuter une commande avec l'argument de la dernière commande

34

Lors de l'exécution de commandes, vous devez parfois exécuter une commande avec l'argument de la dernière commande. Comment pouvez-vous faire cela?

Bien sûr, à l' exception de l'utilisation des touches fléchées et les Deltouches: ... DelDelDel... Del<new_command>.

Radu Rădeanu
la source

Réponses:

45

Par exemple, si vous exécutez cette commande:

mkdir long_path_here/new_dir

très probablement, vous voudrez aller dans le répertoire récemment créé. Vous pouvez le faire en utilisant les "raccourcis" suivants:

  • cd Esc.- tapez cdet après appuyez sur Escpuis sur .(pas dans le même temps). Si la commande précédente n'a pas d'argument, vous obtiendrez la commande précédente elle-même.
  • cd !*- Dans ce cas, vous obtiendrez tous les arguments de la commande previuos. Si la commande précédente n'a pas d'argument, vous n'obtiendrez rien.
  • cd Alt+ .- tapez cdet après appuyez sur Altet .(dans le même temps). En fait, en utilisant cette manière et en continuant d'appuyer .(sans relâcher Alt), vous obtiendrez le dernier argument pour chaque commande de l'historique. Si une commande n'a pas d'argument, vous obtiendrez la commande elle-même.

En général: <command> Esc.ou <command> !*ou <command> Alt+ ..

Radu Rădeanu
la source
wow, vous m'avez économisé des centaines d'heures que j'aurais fini par gaspiller au cours des deux prochaines années
pranavk
32

Il existe quelques raccourcis si vous voulez tous les arguments de la commande précédente, ou juste le dernier argument.

  • Pour tous les arguments: <command> !*
  • Juste pour le dernier argument: <command> !$

Exemples:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Si vous voulez un seul argument parmi une liste d’arguments de la commande précédente, vous pouvez utiliser <command> !!:<argNumber>

Exemple:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
RandomMooCow
la source
2
Vous n'avez besoin que d'un seul !dans la version arg unique, par exemple !:2. En supposant que bash par défaut.
Belacqua
3
Vous pouvez également utiliser !^à la place de !:1.
Paddy Landau
7

Mentionné !*et !$est une bonne chose, mais lorsque vous avez besoin de faire une petite édition, des raccourcis de lignes de lecture viennent vous aider!

Par exemple, au lieu des innombrables ... DelDelDel... Delvous pouvez simplement appuyer sur Ctrl-a(sauter au début de la ligne) Alt+d(supprimer à la fin du mot)

Pour plus d'informations man readlineet rechercher Default key bindings.

defhlt
la source
4

Pour prendre l' nargument th de votre commande précédente, tapez Alt+ n+ Alt_. Par exemple, après:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

taper echosuivi de Alt2Alt_vous donnera ceci à la prochaine invite:

$ echo 2

La "capture d'écran" après avoir frappé Alt2est:

(arg: 2) echo

Vous pouvez répéter Alt_plusieurs fois pour obtenir nsuccessivement l'argument th des commandes précédentes.

Une autre idée utile est de définir un alias r="fc -s". Ensuite, vous pouvez faire des substitutions de commande:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Alok
la source