Ich bin mir nicht sicher, wie ich das ausdrücken soll, aber ich finde mich oft dabei, Befehle wie diesen einzugeben:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
Normalerweise schreibe ich den Pfad nur zweimal aus (mit Tabulatorvervollständigung), oder ich kopiere den Pfad und füge ihn mit dem Cursor ein. Gibt es einen Bashfoo, der das Tippen erleichtert?
bash
command-line
clipboard
line-editor
user1028270
quelle
quelle
bash-fu
:)Antworten:
Es gibt eine Reihe von Tricks (ich glaube, es gibt ein Duplikat), aber dazu tendiere ich
was zu Ihrem Befehl erweitert wird.
Dies wird als Klammererweiterung bezeichnet . In der hier verwendeten Form gibt der
{}
Ausdruck eine Anzahl von durch Kommas getrennten Zeichenfolgen an. Diese "erweitern" den gesamten/etc/prog/dir1/myconfig.yml{,.bak}
Ausdruck und ersetzen den{}
Teil durch jede Zeichenkette: die leere Zeichenkette, geben/etc/prog/dir1/myconfig.yml
und dann.bak
geben/etc/prog/dir1/myconfig.yml.bak
. Das Ergebnis istDiese Ausdrücke können verschachtelt werden:
produziert
Es gibt eine Variante, bei der Zahlen verwendet werden, um Sequenzen zu erzeugen:
produziert
und Sie können auch den Schritt angeben:
produziert
quelle
.bak
.Die Verlaufserweiterung kann für solche Aufgaben hilfreich sein (vorausgesetzt, der Bash-Verlauf ist aktiviert).
In Ihrem Beispiel könnten Sie Folgendes tun:
Hier
!#
bezieht sich das auf die aktuelle Zeile,!#:1
auf Parameter 1 in der aktuellen Zeileund
!#:1.bak
auf Parameter 1 in der aktuellen Zeile, wobei '.bak' am Ende angeheftet ist.Wenn Sie den Verlaufsspezifizierer eingegeben haben, können Sie ihn mit Ctrl+ Alt+ Eauf seinen tatsächlichen Wert erweitern, wenn Sie z. B. den Dateinamen überprüfen oder ändern möchten.
Der Abschnitt "History Expansion" in den Bash-Manpages enthält weitere Informationen.
quelle
Ähnlich wie die Antwort von Progo, aber etwas einfacher:
C-w
Schneidet das Wort links vom Cursor ab ("tötet") undC-y
fügt es erneut ein ("reißt").quelle
Sie können auch von der Kommandozeile aus Ausschneiden und Einfügen (Kill-Yank in Emacs / Bash-Begriffen), um Teile zur Bearbeitung zu duplizieren.
M-d
tötet vorwärts bis zur Wortgrenze, und Sie können Text mehrmals töten, und alle werden zum Ziehen zu einer einzigen „Paste“ zusammengefügt. Praktisch!Ziehen Sie dies alles zurück zur Befehlszeile am Cursor durch
C-y
. Wenn Sie also eine Zeile wie diese haben (das Blockelement █ zeigt die Cursorposition an):In beiden Fällen ist es von Vorteil, sich mit den Angeboten von bash in der interaktiven Schlüsselabteilung vertraut zu machen. http://web.mit.edu/gnu/doc/html/features_7.html
quelle
In
tcsh
oderzsh
, Alt+Ctrl+_inemacs
Betrieb (copy-prev-word
Widget) fügt das letzte Wort, sobash
hat eincopy-backward-word
Widget (standardmäßig nicht an eine Taste gebunden), das jedoch nur das Wort in den Ringpuffer kopiert. Sie müssen auch Ctrl-Y(imemacs
Modus) drücken, um es zu ziehen. Aber du könntest tun:Um Alt+Ctrl+_das Kopieren / Snarf und Einfügen / Yank wie in
tcsh
/ zu tunzsh
.quelle