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 + . ?

16voto

GuyMatz Punkte 643

Sie können auch Argumente von jedem beliebigen Befehl in Ihrem Verlauf abrufen!

$ echo a b c d e f g
a b c d e f g
$ echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar
$ history | tail -5
  601  echo build/libs/jenkins-utils-all-0.1.jar
  602  history | tail -10
  603  echo a b c d e f g
  604  echo build/libs/jenkins-utils-all-0.1.jar
  605  history | tail -5
$ echo !-3:4
echo d
d
$ echo !604:1
echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar

9voto

Moshe Bixenshpaner Punkte 1810

!^ liefert den ersten Parameter, !$ liefert den letzten Parameter, !: n erhalten Sie das n-te Element.

4voto

Grundsätzlich wird es beim Rütteln verwendet vorherige (Kommandos) Argumente .

Zum Beispiel, wenn der folgende Befehl ausgegeben wird:

echo Hello, world how are you today?

dann, Hello, wird das erste Argument sein, und today? die sechste das ist die letzte; das heißt, sie kann durch Tippen referenziert werden:

Alt+6 gefolgt von Ctrl-Alt-6


Ctrl wird traditionell mit einem Hutzeichen bezeichnet ^ den Namen der Schlüssel vorangestellt, und Alt como M- das ist M eta Vorwahl.

Die obige Abkürzung kann also wie folgt umdefiniert werden ^My zu zerreißen.


Außerdem gibt es Hüte Substitutionskürzel in der Befehlszeile:

echo Hello, world!

^Hello^Bye

Bye, world!

um den vorherigen Befehl durch den Befehl erste übereinstimmende Zeichenfolge , Bedeutung:

Hello, world! Hello, people!

^Hello^Bye

zur Folge haben würde:

Bye, world! Hello, people!

so dass das zweite Spiel ( hello ) unverändert.

Hinweis: Lassen Sie nicht Platz zwischen den Hüten oder die Operation wird nicht funktionieren.


Das obige ist nur eine Abkürzung für:

!:s/Hello/Bye

Event-Level(*)-Substitution für die erste gefundene (übereinstimmende) Zeichenkette im vorherigen Befehl, wobei dem ersten Teil das Zeichen "*" vorangestellt wird. g Schalter gilt für die ganze Reihe g lobal :

echo Hello, world! Hello, people!

!:gs/Hello/Bye

Bye, world! Bye, people!

wie es in anderen verwandten Befehlen üblich ist, z. B. sed , vi und in regex (regulärer Ausdruck) - ein Standardverfahren für die Suche ( Matchstring ).

Nein, das können Sie nicht tun !:sg/Hello/Bye o !:s/Hello/Bye/g hier, das ist die Syntax !


  • ! steht für Ereignisse; Ereignis kann als Befehlsausgabe oder Operation in der Befehlshistorie verstanden werden.

Das ist das, was ich verstanden habe, indem ich es selbst benutzte und Dinge ausprobierte, die ich aus verschiedenen Quellen wie Handbüchern, Blogs und Foren entnommen hatte.

Ich hoffe, es bringt etwas Licht in die geheimnisvollen Wege der bash die Bourne-Again-Shell (eine Anspielung auf sh Shell, die ihrerseits nach dem Nachnamen ihres Erfinders Bourne-Shell genannt wird), was in vielen Distributionen einschließlich Servern die Standardshell ist ( Server-Betriebssysteme ).

1voto

nisetama Punkte 5907

Die am Ende der akzeptierten Antwort beschriebene Methode funktioniert bei mir auch mit dem nullten Argument. Ich habe diese Zeilen in meinem ~/.inputrc :

"\en": "\e0\e."
"\em": "\e1\e."
"\e,": "\e2\e."

\e2\e. hat den Vorteil gegenüber \e2\e\C-y dass bei wiederholtem Drücken der Taste die vorherigen Befehle durchlaufen werden, anstatt das zweite Argument des vorherigen Befehls mehrfach einzufügen.

Um den gesamten vorherigen Befehl einzufügen, können Sie Folgendes eingeben !!\e^ . \e^ es history-expand-line .

1voto

Ján Lalinský Punkte 134

Um das 1. Argument einzufügen, halten Sie die Alt-Taste gedrückt und drücken Sie bei gedrückter Alt-Taste die '1'-Taste, gefolgt von der '.'-Taste.

Um das n-te Argument einzufügen, ersetzen Sie die obige Taste '1' durch die entsprechende Zahlentaste.

Wenn dies nicht funktioniert, kann es sein, dass Ihr Terminalemulator die Alt-Taste abfängt, bevor er die Shell erreicht. Einige Terminals (xfce4-terminal) erlauben es, die "Alt-" Tastenkombinationen in der Konfigurationsdatei zu deaktivieren.

Dank an Jonas Eberle, ich habe dies aus seinem Kommentar zu einer anderen Antwort hier herausgefischt.

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