GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguire nuovamente il comando precedente con argomenti diversi

!:0 dovrebbe fare il trucco. Dalla documentazione 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 $.

(Funziona anche con bash.) C'è anche !-1 se lo trovi più comodo da digitare.


#TL;DRAlt +0 +. :inserisce l'ultimo comando senza gli argomenti

Testato su Ubuntu 18.04 con le impostazioni di associazione tasti predefinite (ovvero associazioni di tasti Emacs)

Puoi combinare scorciatoie da tastiera

Consideriamo l'ultimo comando come:

mv foo bar

su , Ctrl +w :ultimo comando senza l'ultima parola =mv foo

Alt +0 +. :primo argomento dell'ultimo comando =mv

Alcune scorciatoie utili:

  • Alt +. :inserisci l'ultimo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)

  • Alt +numero +. :inserisci l'ennesimo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)

  • Alt +- , numero , Alt +. , zsh: Alt +- +# +. :inserisci #n° primo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)

  • Comandi taglia (rispetto alla posizione del cursore)

  • Ctrl +w :taglia l'ultima parola

  • Alt +d :taglia la parola successiva

  • Ctrl +k :taglia tutto dopo

  • Ctrl +u , zsh: Alt +w :taglia tutto prima

  • zsh: Ctrl +u :taglia l'intero comando (In bash puoi combinare Ctrl +u , Ctrl +k )

  • Ctrl +y :incolla i caratteri precedentemente tagliati con qualsiasi comando Taglia . In bash puoi concatenare i comandi cut e Ctrl +y li incollerà tutti.

  • Ctrl +_ :annulla l'ultima modifica (molto utile quando si supera Ctrl +w )

  • Ctrl +sinistra :passa all'ultima parola

  • Ctrl +destra :passa alla parola successiva

  • casa o Ctrl +a :sposta all'inizio del comando

  • fine o Ctrl +e :sposta alla fine del comando

Per vedere tutte le scorciatoie disponibili

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

Purtroppo ci sono alcune limitazioni

"parole" include solo a-zA-Z caratteri, quindi qualsiasi carattere simbolo interromperà le scorciatoie di parole.

Quindi, se l'ultimo argomento era un URL e vuoi cancellarlo con Ctrl +w sarà un dolore.

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

Per cancellare quell'url usando Ctrl +w , dovresti ripeterlo 12 volte.

Sarebbe bello avere scorciatoie simili che si fermano solo al carattere spazio

Lo tengo aggiornato qui:https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md


Linux
  1. Comando Nohup con esempi

  2. Comando JQ in Linux con esempi

  3. Shell Script Wrapper per impedire l'esecuzione di comandi senza argomenti?

  4. argomenti della riga di comando per eseguire docker

  5. Perché eseguire un comando shell Linux con "&"?

Comando IP Linux con esempi

Comando Netcat (nc) con esempi

15 Comando Linux ps con esempi

Comando runuser Linux - Esegui Shell con l'ID utente/gruppo specificato

Comando della cronologia con esempi

Esegui comandi con un limite di tempo in Ubuntu 20.04