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

30

Lorsque vous exécutez des 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 des touches Del : ... Del Del < kbd> Del ... Del <new_command> .

    
posée Radu Rădeanu 06.06.2013 - 16:07
la source

4 réponses

41

Par exemple, si vous exécutez cette commande:

mkdir long_path_here/new_dir

vous souhaiterez probablement aller dans le répertoire récemment créé. Vous pouvez le faire en utilisant les "raccourcis" suivants:

  • cd Esc . - tapez cd et après avoir appuyé sur Esc suivi de . (pas dans la même temps). Si la commande précédente n'a pas d'arguments, 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 cd et après avoir appuyé sur Alt et . (dans le même temps ). En fait, en utilisant cette méthode et en continuant d'appuyer sur . (sans libérer Alt ), vous obtiendrez le dernier argument pour chaque commande de l'historique. Si une commande n'a pas d'arguments, vous obtiendrez la commande elle-même.

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

    
réponse donnée Radu Rădeanu 06.06.2013 - 16:07
la source
26

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 à partir d’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/
    
réponse donnée RandomMooCow 06.06.2013 - 21:34
la source
5

Mentionné !* et !$ est une bonne chose, mais lorsque vous devez effectuer quelques modifications, les raccourcis de readline viennent vous aider!

Par exemple, au lieu des innombrables ... ← < /kbd>DelDelDel...Del vous pouvez simplement appuyer sur Ctrl-a (aller au début de la ligne) Alt + d (supprimer à la fin du mot)

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

    
réponse donnée defhlt 06.06.2013 - 22:32
la source
3

Pour prendre l'argument n 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 echo suivi de Alt 2 Alt _ vous donnera ceci à l'invite suivante:

$ echo 2

La "capture d'écran" après avoir atteint Alt 2 est:

(arg: 2) echo

Vous pouvez répéter plusieurs fois Alt _ pour obtenir l’argument n des commandes précédentes.

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

$ echo 1
1
$ r echo=history
history 1
27755  history 1
    
réponse donnée Alok 07.06.2013 - 01:09
la source

Lire d'autres questions sur les étiquettes