So erweitern Sie * in der Bash-Befehlszeile

30

Ich verstehe das, wenn Sie tippen ls * es ist eigentlich erweitert um ls a b c wenn das aktuelle Verzeichnis Dateien enthält a, b und c.

Ich habe mich gefragt, ob es eine Möglichkeit gibt, dies zu erweitern, bevor ich die Eingabetaste drücke. Ähnlich wie Strg + X funktioniert, oder Tab abgeschlossen funktioniert.

Also, um mich klar zu machen

$ ls *
<press magic key>
$ ls a b c

ähnlich wie:

$ ls ~/
<press tab>
$ ls /home/username

Ich dachte, ich hätte das schon einmal gesehen, aber ich könnte mich geirrt haben.

bramp
quelle
Nun, ich weiß sehr wenig, aber das Beste, von dem ich weiß, ist $ echo * & lt; ENTER & gt; Sie können dies vor dem Befehl ls * tun. Das ist natürlich nicht ganz der Hit oder eine Abkürzung, um es zu erweitern.
barlop
Aber vielleicht würden Linux-Benutzer nichts wie ls * much 'machen, weil es mit ls wahrscheinlich nicht notwendig ist. Aber auch Globbing verhält sich auf verschiedenen Shells unterschiedlich, so dass es nicht so portabel ist, aber wenn es praktisch ist, dann ist es in Ordnung. Aber in ls Fall nicht notwendig. ls * / listet Verzeichnisse auf, aber nicht so sehr, wofür ls entwickelt wurde.
barlop

Antworten:

17

Du kannst den ... benutzen glob-expand-word Funktion, vom Menschen bash:

The word before point is treated as a pattern for pathname
expansion, and the list of matching file names is inserted,
replacing the word. If a numeric argument is supplied, an
asterisk is appended before pathname expansion.

Fügen Sie so etwas zu Ihrer hinzu ~/.inputrc:

Control-x: glob-expand-word

So $ ls * gefolgt von Strg-X wird zu erweitern $ ls a b cin deinem Beispiel.

cYrus
quelle
6
Es sollte schon gebunden sein. Und Strg-x ist bereits als Präfix an eine Reihe von Dingen gebunden. Tun bind -p | grep 'C-x' Sie zu sehen.
Dennis Williamson
Genau das habe ich gesucht! Vielen Dank
bramp
@Dennis, es war noch nicht gebunden, aber das Hinzufügen zu meiner .inputrc hat. Ich denke, das ist Debians Standard.
bramp
2
@ Tennis: Es ist gebunden an C-x* auf meinem System.
cYrus
19

In der Bash wird die Readline-Fähigkeit aufgerufen glob-expand-word und ist gebunden an Strg X * standardmäßig.

Ignacio Vazquez-Abrams
quelle
9

Wenn du drin bist vi Modus ( set -o vi ) ist der "magische Schlüssel" Esc * . Das funktioniert mit beiden bash und ksh.

jlliagre
quelle
3
$ bind -q glob-expand-word
glob-expand-word can be invoked via "\C-x*".

$ bind -q insert-completions
insert-completions can be invoked via "\e*".

Um diese zu nutzen, können wir tun

ls * Strg + x *

oder

ls * Esc *

Erweitern Sie komplizierte Zeilen, bevor Sie die Eingabetaste drücken

Steven Penny
quelle
Dies ist die beste Antwort, da die genaue Tastenkombination ermittelt wird, die in verschiedenen Umgebungen unterschiedlich sein kann.
wisbucky
0

Eine Alternative zu glob-expand-word (\ C-x *) sind Einfüge-Vervollständigungen (\ e *). Es funktioniert ohne Sternchen am Ende, aber es enthält auch andere Vervollständigungen wie versteckte Dateien. Ich habe beide in ~ / .inputrc rebound:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

Mit glob-complete-word (\ eg) kann zum Beispiel konvertiert werden /System/Library/Launch*/*Finder zu /System/Library/LaunchAgents/com.apple.Finder.plist.

Lri
quelle