bash: Holen Sie sich eine Liste der Befehle ab, die mit einer bestimmten Zeichenfolge
Ist es möglich, zu erhalten Bash verwenden, um eine Liste von Befehlen, beginnend mit einem bestimmten string?
Ich möchte zu bekommen, was gedruckt wird, schlagen <tab> zweimal nach der Eingabe der start des Befehls und, zum Beispiel, speichern Sie es in eine variable.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein zu verwenden, die compgen - Befehl, etwa so:
Zum Beispiel, "compgen -A builtin l" gibt
Können Sie andere Schlüsselwörter anstelle von "builtin" auf andere Arten von Abschluss. Builtin gibt Sie shell-builtin-Befehle. "Datei" gibt Sie den lokalen Dateinamen, etc.
Hier ist eine Liste von Aktionen (von der BASH man-page für komplette, die verwendet compgen):
Einer lustigen Art und Weise, dies zu tun ist, zu schlagen
M-*
(Meta ist in der Regel die linke Alt-Taste).Als ein Beispiel, geben Sie diese:
Dann drücken Sie
M-*
:Lesen Sie mehr dazu in
man 3 readline
; es ist ein Merkmal derreadline
Bibliothek.Wenn Sie möchten, genau wie die bash vollständig wäre
compgen abgeschlossen, mit den gleichen Regeln bash verwendet, wenn die Tab.
JacobM s Antwort ist Super. Für es manuell zu tun, ich würde so etwas wie dieses:
Den test vor dem Ausgang stellt sicher, dass nur die ausführbaren regulären Dateien angezeigt werden. Das obige Bild zeigt alle Befehle mit
mod
.Interessant, ich wusste nicht, über
compgen
. Hier ein script, das ich verwendet habe, es zu tun, die nicht überprüfen, für nicht-ausführbare Dateien:Speichern Sie das Skript irgendwo in Ihrem
$PATH
(ich nannte esfindcmd
),chmod u+w
es, und dann verwenden Sie es, wiegrep
, indem Sie Ihre bevorzugten Optionen und Muster:Iteration über die $PATH-variable und tun
ls beginningofword*
für jedes Verzeichnis im Pfad?Um es genau entspricht, würden Sie benötigen, heraus zu filtern, werden nur die ausführbaren Dateien und die Sortierung nach name (sollte Recht einfach mit ls-flags und den Befehl "Sortieren").
Was ist aufgeführt, wenn Sie betroffen sind die Binär-Dateien in Ihrem PFAD, die mit dieser Zeichenfolge beginnen. Also, wenn Sie Ihre PFAD-variable enthält:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin:/usr/lib/qt/bin:/usr/share/texmf/bin:.
Bash Aussehen wird, in jedem dieser Verzeichnisse zeigen Sie die Vorschläge, sobald Sie treffen . So, um die Liste der Befehle mit "ls" in eine variable, die Sie tun könnten:
MYVAR=$(ls /usr/local/bin/ls* /usr/bin/ls* /bin/ls*)
Natürlich könnte man hinzufügen, alle anderen Verzeichnisse habe ich nicht.
Nur so zum Spaß, eine andere manuelle Variante:
wo
pattern
gibt den Dateinamen-Muster, das Sie verwenden möchten. Dies wird miss Befehle, die nicht weltweit ausführbar, aber das Sie die Berechtigung haben für.[getestet auf Mac OS X]
Verwenden Sie die
-or
und-and
flags zu bauen, eine umfassendere version dieses Befehls:abholen, die Dateien haben Sie die Berechtigung für Kraft zu besitzen. Ich sehe nicht ein allgemeiner Weg, um alle diejenigen, die Sie ausführen können, die aufgrund von Gruppenzugehörigkeit, die Sie ohne viel weitere Codierung.