Ich weiß, dass wenn Sie sich in der Shell befinden, die einzigen Befehle verwendet werden können, die in einem Verzeichnis gefunden werden können, das auf PATH festgelegt ist. Auch wenn ich nicht weiß, wie ich sehen soll, welche Verzeichnisse in meiner PATH-Variablen enthalten sind (und dies ist eine weitere gute Frage, die beantwortet werden könnte), möchte ich Folgendes wissen:
Ich komme zu Shell und schreibe:
$ lshw
Ich möchte einen Befehl auf der Shell wissen, der mir sagen kann, wo sich dieser Befehl befindet. Mit anderen Worten, wo befindet sich diese "ausführbare Datei"?
Etwas wie:
$ location lshw
/usr/bin
Jemand?
quelle
locate
, können Sie Dateien finden. Es wird eine Datenbank verwendet, die verwaltetupdatedb
wird und von einem Cron-Job ausgeführt wird. Dalocate
eine Datenbank und nicht das gesamte Dateisystem durchsucht wird, ist dies viel schneller alsfind
(was als letzter Ausweg verwendet werden könnte).type -a
kann es verwirrend sein. zB für den Fall,nvm
dass es sich um eine Bash-Funktion handelt, die ichtype -a nvm | head -n1
ausführen musste : um herauszufinden, was genau istnvm
.type -a
die Funktionsdefinition sowie den Typ der ausführbaren Datei aus. Das Risiko bei der Verwendunghead
besteht darin, dass bei Namen mit mehr als einem Typ die zusätzlichen Typen nicht ausgegeben werden. Vielleicht möchten Sie sich ansehentype -t
.So was:
So zeigen Sie alle Befehle an, die in Ihrem Pfad übereinstimmen:
quelle
which
ist problematisch, weil es mehrere Implementierungen gibt, von denen viele völlig falsch sind und andere gut zu funktionieren scheinen, aber seltsame Überraschungen haben. Sie solltentype
stattdessen bevorzugen .type -a lshw
PATH
ist eine Umgebungsvariable und kann mit dem Befehl echo angezeigt werden:Es ist eine Liste von Pfaden, die durch das Doppelpunktzeichen '
:
' getrennt sind.Der
which
Befehl gibt an, welche Datei ausgeführt wird, wenn Sie einen Befehl ausführen:Manchmal erhalten Sie einen Pfad zu einem Symlink. Wenn Sie diesen Link dahin verfolgen möchten, wo sich die eigentliche ausführbare Datei befindet, können
readlink
Sie folgende Ausgabe verwenden und fütternwhich
:Der
-f
Parameter weistreadlink
an, dem Symlink weiterhin rekursiv zu folgen.Hier ist ein Beispiel von meiner Maschine:
quelle
quelle
In der TENEX C-Shell tcsh können Sie die Position (en) eines Befehls auflisten oder, wenn es sich um einen integrierten Befehl handelt, den folgenden
where
Befehl verwenden:quelle
Die Korn-Shell
ksh
bietet diewhence
integrierte Shell, die andere integrierte Shell-Shell, Makros usw. identifiziert. Derwhich
Befehl ist jedoch portabler.quelle
whence -a
ist ähnlich wie bei Bashtype -a
.Eine Alternative zu
type -a
istcommand -V
Da ich mich meistens nur für das erste Ergebnis interessiere, pfeife ich auch vom Kopf. Auf diese Weise wird der Bildschirm im Falle einer Bash-Funktion nicht mit Code überflutet.
quelle