web-dev-qa-db-fra.com

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

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, sauf l'utilisation des touches fléchées et Del clés: ...DelDelDel...Del<new_command>.

34
Radu Rădeanu

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:

  • cdname__ Esc. - tapez cdet après avoir appuyé sur Esc suivi par . (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.
  • cdname__ Alt+. - tapez cdet après avoir appuyé sur Alt et . (dans le même temps). En fait, en utilisant cette façon et en continuant à appuyer sur . (sans libérer 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+..

45
Radu Rădeanu

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> !*
  • 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/
32
RandomMooCow

Mentionné !* et !$ est une bonne chose, mais lorsque vous devez faire un peu de modification, les raccourcis en lecture-lecture viennent vous aider!

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

Pour plus d’informations, man readline et recherchez Default key bindings.

7
defhlt

Pour prendre l'argument nth 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

en tapant echo suivi de Alt2Alt_ vous donnera ceci à la prochaine invite:

$ echo 2

La "capture d'écran" après avoir touché Alt2 est:

(arg: 2) echo

Vous pouvez répéter Alt_ plusieurs fois pour obtenir successivement l'argument nth des commandes précédentes.

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

$ echo 1
1
$ r echo=history
history 1
27755  history 1
3
Alok