So erweitern Sie * in der Bash-Befehlszeile

7521
bramp

Ich verstehe, dass, wenn Sie tippen, ls *es tatsächlich erweitert wird, ls a b cwenn das aktuelle direkt Dateien hat a, bund c.

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

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 mal gesehen, aber ich hätte mich geirrt.

30
Nun, ich weiß sehr wenig, aber das Beste, was ich weiß, ist $ echo * Sie könnten das vor dem Befehl ls * tun. Das ist nicht wirklich ein Tab oder eine Abkürzung, um es natürlich zu erweitern. barlop vor 13 Jahren 0
Aber vielleicht würden Linux-Benutzer nichts wie ls * tun, da es wahrscheinlich nicht unbedingt mit ls notwendig ist. Aber auch das Globbing verhält sich auf verschiedenen Shells anders, also ist es nicht so tragbar, aber wenn es bequem ist, dann in Ordnung. Aber im Fall von ls nicht nötig. ls * / listet Verzeichnisse auf, aber nicht so sehr, wozu ls gedacht ist. barlop vor 13 Jahren 0

5 Antworten auf die Frage

19
Ignacio Vazquez-Abrams

In Bash wird die Readline-Funktion aufgerufen glob-expand-wordund ist CtrlX*standardmäßig an diese gebunden .

17
cYrus

Sie können die glob-expand-wordFunktion von Mann aus verwenden bash:

Das Wort vor dem Punkt wird als Muster für den Pfadnamen behandelt Erweiterung, und die Liste der übereinstimmenden Dateinamen wird eingefügt, das Wort ersetzen. Wenn ein numerisches Argument angegeben wird, wird ein Sternchen wird vor der Erweiterung des Pfadnamens angehängt. 

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

Control-x: glob-expand-word 

Also $ ls *gefolgt von Ctrl-Xwird $ ls a b cin Ihrem Beispiel erweitert.

Es sollte schon gebunden sein. Und Ctrl-x ist bereits an ein Haufen Zeug als Präfix gebunden. Binden Sie -p | grep 'C-x'`, um sie zu sehen. Dennis Williamson vor 13 Jahren 6
Genau das habe ich gesucht! Vielen Dank bramp vor 13 Jahren 0
@Dennis, es war noch nicht gebunden, aber das Hinzufügen zu meinem .inputrc hat es. Ich denke, das ist Debians Standard. bramp vor 13 Jahren 0
@Dennis: Es ist an Cx * auf meinem System gebunden. cYrus vor 13 Jahren 2
9
jlliagre

Wenn Sie sich im viModus ( set -o vi) befinden, wird der "magische Schlüssel" angezeigt Esc*. Das funktioniert mit beiden bashund ksh.

3
Steven Penny
$ bind -q glob-expand-word glob-expand-word kann über "\ Cx *" aufgerufen werden.  $ bind -q Insert-Vervollständigungen Insert-Vervollständigungen können über "\ e *" aufgerufen werden. 

So können wir diese nutzen

ls * Ctrl+x *

oder

ls * Esc *

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

Dies ist die beste Antwort, da genau die Tastenkombination nachgesehen wird, die in verschiedenen Umgebungen unterschiedlich sein kann. wisbucky vor 6 Jahren 0
0
user495470

Eine Alternative zu glob-expand-word (\ Cx *) sind Insert-Vervollständigungen (\ e *). Es funktioniert ohne Sternchen am Ende, enthält aber 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 

glob-complete-word (\ eg) kann beispielsweise zur Konvertierung /System/Library/Launch*/*Finderin verwendet werden /System/Library/LaunchAgents/com.apple.Finder.plist.