Wie kann man schnell das erste Wort in einem Bash-Befehl ändern?

Wie kann man schnell das erste Wort in einem Bash-Befehl ändern?

Ich möchte meinen Arbeitsablauf mit Bash etwas verbessern und stelle fest, dass ich denselben Befehl häufig in einer anderen ausführbaren Datei ausführen möchte.

Einige Beispiele:

Git (wo ich schnell das zweite Wort ändern möchte):

git diff     foo/bar.c
git checkout foo/bar.c

Cat/rm (wobei nur das erste Wort geändert werden muss):

cat foo/is/a/very/long/path/to/bar.c
rm  foo/is/a/very/long/path/to/bar.c

CtrlIch weiß, dass ich + drücken aund dann Deldas erste Wort entfernen kann, aber ich frage mich, ob es dafür einen schnelleren Weg gibt.

Antwort1

!$wird bis zum letzten Wort Ihres vorherigen Befehls erweitert.

Sie könnten also Folgendes tun:

cat foo/is/a/very/long/path/to/bar.c

rm !$

oder:

git diff foo/bar.c

git checkout !$

Ihre Beispiele wiederholten zufällig nur das letzte Wort, also !$funktionierte es einwandfrei. Wenn Sie tatsächlich viele Argumente hätten, die Sie wiederholen wollten, und nur das erste Wort ändern wollten, könnten Sie verwenden !*, was sich auf alle Wörter des vorherigen Befehls mit Ausnahme des Nullworts ausdehnt.

Siehe den Abschnitt „HISTORY EXPANSION“ der bashManpage. Dort gibt es viel Flexibilität.

Antwort2

Ctrl+, aum zum Zeilenanfang zu gelangen, dann Alt+ d, um das erste Wort zu löschen.

Antwort3

Ich bin mir nicht sicher, ob es tatsächlich schneller wäre oder nicht, aber sehen SieDieser Artikel,insbesondere Punkt Nr. 3:

  1. Ersetzen Sie eine Zeichenfolge aus dem vorherigen Befehl durch ^str1^str2^

Im folgenden Beispiel haben wir zuerst den Befehl ls ausgeführt, um eine Datei zu überprüfen. Später haben wir festgestellt, dass wir den Inhalt der Datei anzeigen möchten. Anstatt den gesamten Dateinamen erneut einzugeben, können wir das „ls“ im vorherigen Befehl einfach durch „cat“ ersetzen, wie unten gezeigt.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

Antwort4

Zusätzlich zur Antwort von @jjlin könnten die folgenden Tipps für Sie von Interesse sein:

  • Ctrl+ wlöscht das Wort links von Ihnen
  • Ctrl+ klöscht vom Cursor bis zum Ende der Befehlszeile
  • Ctrl+ ulöscht vom Cursor bis zum Anfang der Befehlszeile
  • Alt+ bbewegt den Cursor ein Wort zurück
  • Alt+ fbewegt den Cursor ein Wort vorwärts
  • $_enthält das letzte Argument der vorherigen Befehlszeile

Weitere Informationen hierzu finden Sie im Abschnitt „Readline-Befehlsnamen“ der bashManpage.

z.B:

cat foo/is/a/very/long/path/to/bar.c
rm $_

verwandte Informationen