364 Stimmen

Wie werden die Argumente des vorherigen Befehls verwendet?

Ich weiß, dass Esc + . gibt Ihnen das letzte Argument des letzten Befehls.

Aber ich interessiere mich für das erste Argument des letzten Befehls. Gibt es eine Tastenkombination, um dies zu tun?

Gibt es eine generische Möglichkeit, das n-te Argument des letzten Befehls zu erhalten? Ich weiß, dass man in einem Bash-Skript Folgendes verwenden kann $0 , $1 usw., aber diese funktionieren nicht über die Befehlszeile.

Wie wäre es außerdem, das 0-te Argument früherer Befehle zu durchlaufen, so wie wir es mit dem letzten Argument tun können, indem wir kontinuierlich die Taste Esc + . ?

401voto

user1953081 Punkte 3785

!$ ruft das letzte Element des vorherigen Befehlszeilenarguments ab.

280voto

nonopolarity Punkte 138211

Um das erste Argument zu verwenden, können Sie !^ o !:1

Beispiel:

$ echo a b c d e 
a b c d e
$ echo !^
echo a
a

$ echo a b c d e 
a b c d e
$ echo !:1
echo a
a

Da Ihre Frage die Verwendung anderer Argumente betrifft, finden Sie hier einige nützliche Argumente:

!^      first argument
!$      last argument
!*      all arguments
!:2     second argument

!:2-3   second to third arguments
!:2-$   second to last arguments
!:2*    second to last arguments
!:2-    second to next to last arguments

!:0     the command
!!      repeat the previous line

Die ersten vier Formen werden am häufigsten verwendet. Die Form !:2- ist etwas kontraintuitiv, da es das letzte Argument nicht enthält.

68voto

Ajith Antony Punkte 949

Die Antwort von @larsmans hat mir so gut gefallen, dass ich mehr erfahren musste. Ich füge diese Antwort, um anderen zu helfen, den Abschnitt der Manpage zu finden und zu wissen, was sie googeln sollen:

$ man  -P 'less -p ^HISTORY\ EXPANSION' bash
<...>
Word Designators

Word designators are used to select desired words from the event.
A : separates the event specification from the word designator.
It may be omitted if the word designator begins with a ^, $, *, -,
or %.  Words are numbered from the beginning of the line, with the
first word being denoted by 0 (zero).  Words are inserted into the
current line separated by single spaces.

   0 (zero)
          The zeroth word.  For the shell, this is the command word.
   n      The nth word.
   ^      The first argument.  That is, word 1.
   $      The last argument.
   %      The word matched by the most recent ‘?string?’ search.
   x-y    A range of words; ‘-y’ abbreviates ‘0-y’.
   *      All of the words but the zeroth.
          This is a synonym for ‘1-$’.  
          It is not an error to use * if there is just one word in
          the event; the empty string is returned in that case.
   x*     Abbreviates x-$.
   x-     Abbreviates x-$ like x*, but omits the last word.

   If a word designator is supplied without an event
   specification, the previous command is used as the event.

22voto

Madacol Punkte 2470

Getestet auf Ubuntu 18.04


Zum Einfügen früherer Argumente:

  • Alt + . : letztes Argument des letzten Befehls einfügen.
  • Alt + # + . #nth last argument from last command einfügen.
  • Alt + - , # , Alt + . , zsh: Alt + - + # + . #nth first argument from last command einfügen.

Unter Linux können Sie Befehle wiederholen, um in der Geschichte zurückzugehen

Beispiel:

Der letzte Befehl lautet:

mv foo bar
  • Alt + 0 + . : erstes Argument des letzten Befehls einfügen = mv
  • Alt + 2 + . : 2. letztes Argument des letzten Befehls einfügen = foo
  • up , Ctrl + w : letzter Befehl ohne das letzte Wort = mv foo

Allgemeine Abkürzungen

  • Ctrl + w : entfernt das letzte Wort vom Cursor
  • Alt + d : entfernt das nächste Wort vom Cursor
  • Ctrl + k : schneidet alles nach dem Cursor ab
  • Ctrl + u , zsh: Alt + w : schneidet alles vor dem Cursor ab
  • zsh: Ctrl + u : schneidet den gesamten Befehl ab (In der Bash können Sie die Ctrl + u , Ctrl + k )
  • Ctrl + y : Einfügen von Zeichen, die zuvor mit Ctrl + u y Ctrl + k
  • Ctrl + : Letzte Bearbeitung rückgängig machen (sehr nützlich bei Überschreitung der Ctrl + w )_
  • Ctrl + left : zum letzten Wort gehen
  • Ctrl + right : zum nächsten Wort gehen
  • home o Ctrl + a : zum Anfang der Zeile gehen
  • end o Ctrl + e : an das Ende der Zeile verschieben

So gehen Sie die Argumente eines vorherigen Befehls durch

funktioniert nur in zsh

ausführen oder dies zu Ihrem ~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word

Verwenden Sie nun Alt + . um so weit zurück zu gehen, wie Sie wollen, dann verwenden Sie Alt + : um die Argumente zu durchlaufen

Angenommen, der letzte Befehl lautet

echo 1 2 3 4 5
  • Alt + . : 5
  • Alt + . + : : 4
  • Alt + . + : + : : 3
  • Alt + . + : + : + : : 2
  • Alt + . + : + : + : + : : 1
  • Alt + . + : + : + : + : + : : echo

Quelle: https://stackoverflow.com/a/34861762/3163120

So sehen Sie alle verfügbaren Tastenkombinationen

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

Ich halte das hier auf dem neuesten Stand: https://github.com/madacol/knowledge/blob/master/bash-zsh_TerminalShorcuts.md

19voto

Brandon Frohbieter Punkte 16807

!^ kann der Befehl für das erste Argument sein. Ich bin nicht sicher, ob es eine Möglichkeit gibt, die n-te zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X