GNU/Linux >> Tutoriels Linux >  >> Linux

Réexécutez la commande précédente avec des arguments différents

!:0 devrait faire l'affaire. À partir de la documentation zsh :

   Word Designators
       A word designator indicates which word or words of a given command line
       are to be included in a history reference.  A `:' usually separates the
       event specification from the word designator.  It may be  omitted  only
       if  the  word designator begins with a `^', `$', `*', `-' or `%'.  Word
       designators include:

       0      The first input word (command).
       n      The nth argument.
       ^      The first argument.  That is, 1.
       $      The last argument.
       %      The word matched by (the most recent) ?str search.
       x-y    A range of words; x defaults to 0.
       *      All the arguments, or a null value if there are none.
       x*     Abbreviates `x-$'.
       x-     Like `x*' but omitting word $.

(Cela fonctionne aussi avec bash.) Il y a aussi !-1 si vous trouvez cela plus pratique à taper.


#TL;DRAlt +0 +. :insère la dernière commande sans les arguments

Testé sur Ubuntu 18.04 avec les paramètres de raccourci clavier par défaut (c'est-à-dire les raccourcis clavier Emacs)

Vous pouvez combiner des raccourcis clavier

Considérons que la dernière commande est :

mv foo bar

haut , Ctrl +w :dernière commande sans le dernier mot =mv foo

Alt +0 +. :premier argument de la dernière commande =mv

Quelques raccourcis utiles :

  • Alt +. :insère le dernier argument de la dernière commande (répéter pour remonter dans l'historique)

  • Alt +numéro +. :insère le nième dernier argument de la dernière commande (répéter pour remonter dans l'historique)

  • Alt +- , nombre , Alt +. , zsh : Alt +- +# +. :insère le nième premier argument de la dernière commande (répéter pour remonter dans l'historique)

  • Commandes Couper (par rapport à la position du curseur)

  • Ctrl +w :coupe le dernier mot

  • Alt +d :coupe le mot suivant

  • Ctrl +k :coupe tout après

  • Ctrl +u , zsh : Alt +w :coupe tout avant

  • zsh : Ctrl +u :coupe toute la commande (Dans bash vous pouvez combiner Ctrl +u , Ctrl +k )

  • Ctrl +y  :coller les caractères précédemment coupés avec n'importe quelle commande Couper . En bash, vous pouvez enchaîner les commandes de coupe , et Ctrl +y les collera tous.

  • Ctrl +_ :annuler la dernière édition (très utile en cas de dépassement de Ctrl +w )

  • Ctrl +gauche :passer au dernier mot

  • Ctrl +droit :passer au mot suivant

  • accueil ou Ctrl +un :aller au début de la commande

  • fin ou Ctrl +e :aller à la fin de la commande

Pour voir tous les raccourcis disponibles

  • bash : bind -lp
  • zsh : bindkey -L

Malheureusement, il existe certaines limitations

"words" inclut uniquement a-zA-Z caractères, de sorte que tout caractère de symbole arrêtera les raccourcis vers les mots.

Donc, si le dernier argument était une URL et que vous voulez l'effacer avec Ctrl +w ce sera pénible.

Ex :curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments

Pour effacer cette url en utilisant Ctrl +w , vous devrez le répéter 12 fois.

Ce serait formidable d'avoir des raccourcis similaires qui ne s'arrêtent qu'au caractère espace

Je garde cela à jour ici :https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md


Linux
  1. Commande Nohup avec exemples

  2. Ubuntu - Exécuter la commande au démarrage avec sudo

  3. En utilisant l'historique bash pour obtenir une commande précédente, copiez-la, puis "exécutez-la", mais avec la commande commentée

  4. Pourquoi exécuter une commande shell Linux avec '&' ?

  5. Comment exécuter une commande en arrière-plan avec un délai ?

Commande Linux ip avec exemples

Commande Netcat (nc) avec exemples

15 Commande Linux ps avec exemples

Commande Linux runuser - Exécuter Shell avec l'ID utilisateur/groupe spécifié

Commande d'historique avec exemples

Exécuter des commandes avec une limite de temps dans Ubuntu 20.04