Gibt es einen Linux-Befehl, der alle verfügbaren Befehle und Aliase für diese Terminalsitzung auflistet?
Als ob Sie 'a' eingegeben und die Tabulatortaste gedrückt hätten, aber für jeden Buchstaben des Alphabets. Oder 'Alias' ausführen, aber auch Befehle zurückgeben.
Warum? Ich möchte Folgendes ausführen und prüfen, ob ein Befehl verfügbar ist:
ListAllCommands | grep searchstr
Antworten:
Sie können die integrierte Bash (1) verwenden
compgen
compgen -c
listet alle Befehle auf, die Sie ausführen können.compgen -a
listet alle Aliase auf, die Sie ausführen können.compgen -b
listet alle integrierten Funktionen auf, die Sie ausführen können.compgen -k
listet alle Schlüsselwörter auf, die Sie ausführen könnten.compgen -A function
listet alle Funktionen auf, die Sie ausführen können.compgen -A function -abck
listet alle oben genannten auf einmal auf.Überprüfen Sie die Manpage auf andere Vervollständigungen, die Sie generieren können.
So beantworten Sie Ihre Frage direkt:
sollte tun, was du willst.
quelle
compgen | grep
kann es effizienter sein, die Zeichenfolge als Argument an sichcompgen
selbst zu übergeben (wenn bekannt ist, dass es sich um ein Präfix handelt, wie in der Frage impliziert). In diesem Fall wäre dascompgen -ac searchstr
.whatis compgen
und "Keine manuelle Eingabe" fürman compgen
.bash
integrierten Befehl handelt, nicht um einen separaten Befehl mit einer eigenen Manpage. Sie müssen diebash(1)
Manpage lesen oderhelp compgen
über einebash
Befehlszeile ausführen .compgen -c | sort | uniq | less
werden alle verfügbaren Befehle ohne doppelte Zeilen gedruckt und alphabetisch sortiert.Zu .bashrc hinzufügen
Wenn Sie auch Aliase möchten, dann:
quelle
-L
ein, um Symlinks zu ihrem Ziel zu folgen. Hinweis:-L
ist eine Option und nicht Teil des übereinstimmenden Ausdrucks. Daher muss er vor dem Pfad in der Befehlszeile platziert werden. In diesem Fallfind -L {}
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u
(+1 für zsh Kompatibilität)Dort ist der
Befehl, der alle Aliase und Befehle in $ PATH auflistet, in denen mycommand verwendet wird. Kann verwendet werden, um zu überprüfen, ob der Befehl in mehreren Varianten vorhanden ist. Davon abgesehen ... Es gibt wahrscheinlich ein Skript, das $ PATH und alle Aliase analysiert, aber nichts über ein solches Skript weiß.
quelle
Verwenden Sie "which searchstr". Gibt entweder den Pfad der Binärdatei oder das Alias-Setup zurück, wenn es sich um einen Alias handelt
Bearbeiten: Wenn Sie nach einer Liste von Aliasnamen suchen, können Sie Folgendes verwenden:
Fügen Sie dies zu der gewünschten PATH-Suchantwort hinzu. Angenommen, Sie verwenden Bash.
quelle
Der Befehl "Andere" funktionierte auf eingebetteten Systemen nicht für mich, da sie Bash oder eine vollständigere Version von xargs erfordern (Busybox war begrenzt).
Die folgenden Befehle sollten auf jedem Unix-ähnlichen System funktionieren.
Liste nach Ordner:
Listen Sie alle Befehle nach Namen auf
quelle
tr
. Warum nicht einfachls $(echo ${PATH//:/ })
?Versuchen Sie dieses Skript:
quelle
Für Mac-Benutzer ( find hat nicht -executable und xargs hat -d nicht):
quelle
Es ist nützlich, die Befehle basierend auf den dem Befehl zugeordneten Schlüsselwörtern aufzulisten.
Verwenden:
man -k "your keyword"
Fühlen Sie sich frei zu kombinieren mit:
| grep "another word"
So finden Sie beispielsweise einen Texteditor:
man -k editor | grep text
quelle
Versuchen Sie ALT- zu drücken? (Alt und Fragezeichen gleichzeitig). Geben Sie ein oder zwei Sekunden Zeit, um die Liste zu erstellen. Es sollte in Bash funktionieren.
quelle
Hier ist eine Lösung, die Ihnen eine Liste aller ausführbaren Dateien und Aliase gibt. Es ist auch auf Systeme ohne
xargs -d
(z. B. Mac OS X) portierbar und verarbeitet Pfade mit Leerzeichen ordnungsgemäß.Verwendung: Um
myscript.sh [grep-options] pattern
z. B. alle Befehle zu finden, die mitls
Groß- und Kleinschreibung beginnen, tun Sie Folgendes:quelle
Verknüpfungsmethode zum Auflisten aller Befehle. Öffnen Sie das Terminal und drücken Sie zweimal die Tabulatortaste . Das zeigt alle Befehle im Terminal
quelle
grep
genau in wie?Alternativ können Sie eine praktische Liste von Befehlen zusammen mit Kurzbeschreibungen erhalten (sofern der Befehl über eine Manpage verfügt, was die meisten tun):
Dann grepst du es einfach so, wie du willst.
Ausbeuten:
Die Ergebnisse scheinen nicht sortiert zu sein. Wenn Sie also nach einer langen Liste suchen, können Sie ein | werfen sortieren | in die Mitte, und leiten Sie das dann zu einem Pager wie weniger / mehr / am meisten. ala:
Dies gibt eine sortierte Liste aller Befehle zurück, deren Name oder Kurzbeschreibung "zip" enthält, und pumpt den "weniger" -Pager. (Sie können auch "less" durch $ PAGER ersetzen und den Standard-Pager verwenden.)
quelle
Sie können immer zu folgendem:
Die Shell führt den Befehl nur aus, wenn sie ohnehin im Pfad env var aufgeführt sind.
quelle
es hängt davon ab, damit meine ich, es hängt davon ab, welche Shell Sie verwenden. Hier sind die Einschränkungen, die ich sehe:
Ich benutze ZSH, also hier ist eine zsh-Antwort, es macht die folgenden 3 Dinge:
hier ist es:
Wenn Sie zsh verwenden, sollte dies der Fall sein.
quelle
Das Problem ist, dass die Tab-Vervollständigung Ihren Pfad durchsucht, aber nicht alle Befehle in Ihrem Pfad enthalten sind.
Um die Befehle in Ihrem Pfad mit bash zu finden, können Sie Folgendes tun:
für x in
echo $PATH | cut -d":" -f1
; mache ls $ x; getanquelle
Hier ist eine Funktion, die Sie in Ihre bashrc-Datei einfügen können:
Anwendungsbeispiel:
Zu Ihrer Information: IFS ist eine Variable, mit der bash Zeichenfolgen aufteilt.
Sicherlich könnte es dafür bessere Möglichkeiten geben.
quelle
Vielleicht verstehe ich das falsch, aber was ist, wenn Sie die Esc-Taste drücken, bis Sie die Möglichkeiten "Alle X anzeigen" erhalten?
quelle
quelle
compgen -c > /tmp/list.txt && /tmp/wc list.txt
Warum tippst du nicht einfach:
Im Terminal.
Die Muschel wird so etwas sagen
BEARBEITEN:
Ok, ich nehme die Ablehnung, weil die Antwort dumm ist, ich möchte nur wissen: Was ist los mit dieser Antwort !!! Der Fragesteller sagte:
Wenn Sie den Befehl eingeben, erfahren Sie, ob er verfügbar ist!.
Wahrscheinlich meinte er / sie "ohne den Befehl auszuführen" oder "ihn in ein Skript aufzunehmen", aber ich kann seine Gedanken nicht lesen (ist nicht, dass ich nicht regelmäßig kann, es ist nur so, dass er einen Gedankenlesedeflektor trägt )
quelle
formathdd
Befehl existiert. Oh warte, ich will es nur laufen lassen und sehen. gee. Danke :)in debian: ls / bin / | grep "whatImSearchingFor"
quelle