Was kann ich an meiner Shell bash
eingeben (was zufällig ist ), das alle erkannten Befehle auflistet?
Auch unterscheidet sich dies durch Shell? Oder haben alle Shells nur ein "Verzeichnis" von Befehlen, die sie erkennen?
Zweitens eine andere Frage, aber wie kann ich eine davon außer Kraft setzen? Mit anderen Worten , wie kann ich meinen eigenen schreiben view
Befehl ersetzen auf meinem Ubuntu - System vorhandene, die nur Last erscheint vim
.
Antworten:
Sie können verwenden
compgen
Zu Ihrer Information:
quelle
compgen -c
Dinge wie{
oderwhile
nicht genau genommen Befehle enthalten.Eine Shell kennt vier Arten von Befehlen.
~/.bashrc
für Bash).cd
ändert das aktuelle Verzeichnis,set
ändert Optionen und Positionsparameter,export
ändert die Umgebung, ...). Die meisten Shells bieten im Wesentlichen die gleichen Buildins, aber jede Shell verfügt über einige Erweiterungen zum Basissatz.PATH
Umgebungsvariable enthält eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen nach Programmen gesucht werden soll.Falls es mehrere gleichnamige Befehle gibt, wird die erste Übereinstimmung in der obigen Reihenfolge ausgeführt¹.
Sie können sehen, welcher Art von Befehl ein Name entspricht, indem Sie ausführen
type some_name
.Sie können Aliase auflisten, indem Sie das
alias
integrierte ohne Argument ausführen. Es gibt keine Möglichkeit, Funktionen oder integrierte Funktionen aufzulisten, die in allen Shells funktionieren. Eine Liste der eingebauten Funktionen finden Sie in der Dokumentation der Shell.In bash
set
listet das Builtin Funktionen mit ihren Definitionen sowie Variablen auf.typeset -f
Listet in bash, ksh oder zsh Funktionen mit ihren Definitionen auf. In bash können Sie alle Befehlsnamen eines beliebigen Typs mit auflistencompgen -c
. Sie können verwendet werdencompgen -A alias
,compgen -A builtin
compgen -A function
um die Liste Befehle eines bestimmten Typs. Sie können eine zusätzliche Zeichenfolge übergeben,compgen
um nur Befehle aufzulisten, die mit diesem Präfix beginnen.In zsh, können Sie die aktuell verfügbaren Befehle eines bestimmten Typs mit aufzulisten
echo ${(k)aliases}
,echo ${(k)functions}
,echo ${(k)builtins}
undecho ${(k)commands}
(dem letzten List externen Befehlen nur).Das folgende Shell-Agnostic-Snippet listet alle verfügbaren externen Programme auf:
In Bash: Hash-Befehlen gibt es einen Randfall.
Das Bash-Referenzhandbuch sagt:
Versuchen:
Die
PATH
Umgebungsvariable enthält nicht~/dir-for-wat-command
,compgen -c
wird nicht angezeigtwat
, aber Sie können ausführenwat
.Wenn Sie einen vorhandenen Befehl spiegeln möchten, definieren Sie einen Alias oder eine Funktion .
¹ Ausnahme: Einige Buildins (sogenannte Special Buildins ) können nicht von einer Funktion gespiegelt werden - bash und zsh stimmen jedoch in diesem Punkt im Standardmodus nicht mit POSIX überein .
quelle
$PATH
wie/bin:/usr/bin:
(nachgestellt:
), bei denen die ausführbaren Dateien im aktuellen Verzeichnis nicht aufgelistet werden.Die Befehlsliste besteht aus zwei Mengen:
PATH
Sie können die integrierten Funktionen nicht ändern, aber Sie können verhindern, dass die Shell eine integrierte Funktion verwendet, indem Sie den vollständigen Pfadnamen wie angeben
/bin/echo
.Was die Befehle in Ihrem
PATH
, Sie können das ändern.PATH
ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen nach Befehlen gesucht werden soll. Die erste gefundene übereinstimmende Datei "wins".(Diese Syntax funktioniert nicht für
csh
abgeleitete Shells, sondern für alle anderen, die ich kenne.)Das exportiert
PATH
mit~/bin
als erstem Eintrag, gefolgt von dem Rest der vorhandenenPATH
Einträge. Jetzt überprüft Ihre Shelldirectory called
binin your home directory for a command *first* before checking the standard
PATH`, die das System eingerichtet hat. Sie können das neue Verzeichnis auch als letztes überprüfen lassen, indem Sie stattdessen Folgendes verwenden:Um die
PATH
bestehen bleiben für zukünftige Anmeldungen, fügen Sie ihn in eine.profile
oder andere Shell rc - Datei.quelle
Versuchen Sie dies mit bash :
quelle
Wenn Sie zweimal die Tabulatortaste und dann y drücken, wird die Liste aller verfügbaren Befehle in Ihrer aktuellen Shell angezeigt. Für die zweite Frage sollten Sie einen Alias verwenden: Shell-Alias .
quelle