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.


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.


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.


9

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



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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.