Antworten:
Nur eine eingebaute Shell teilt einem korrekt mit, was die Shell für einen bestimmten Befehlsnamen tun wird, da nur eingebaute Shell-Funktionen, Aliase und andere eingebaute Shell-Funktionen usw. vollständig kennen. Denken Sie daran: Nicht alle Befehle entsprechen in erster Linie ausführbaren Dateien.
Für die Bourne Wieder Shell bash, die sich im internen ist der typeBefehl:
$ type '['
[ is a shell builtin
Für die Fish Shellfishtype funktioniert The builtin ähnlich wie bash. Um nur den Pfad zu einer ausführbaren Datei abzurufen, verwenden Sie command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Für die Korn - Shell ksh, die eingebaute in der ist whenceBefehl - mit typezunächst als gewöhnlicher Alias für einzurichten whence -vund die commandeingebaute mit der -vOption entspricht whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Für die Z - Shell, zsh, die eingebaute in der ist whenceBefehl, mit der commandeingebauten mit der -vOption entspricht whenceund die Einbauten type, whichund whereentspricht whencemit den Optionen -v, -cund -cajeweils.
$ whence ls
/bin/ls
Für den TC Shell tcsh, ist die eingebaute in dem whichBefehl - nicht mit einem externen Befehl mit diesem Namen verwechselt werden:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typeist auch in zsh eingebaut?
which-2.19-6.el6.x86_64) eine Startdatei geschrieben wird /etc/profile.d/which2.sh. Dies wird von nicht-csh-Shells gelesen, einschließlich zsh. Es ist ein Alias whichfür sich. Insbesondere für zsh-Benutzer überschreibt es die eingebauten Funktionen which.
Sie können dafür verwenden which:
aix@aix:~$ which ls
/bin/ls
Es funktioniert, indem nach PATHausführbaren Dateien gesucht wird, die mit den Namen der Argumente übereinstimmen. Beachten Sie, dass dies nicht mit Shell-Aliasen funktioniert:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
typefunktioniert jedoch:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichist nicht unbedingt genug für sich. Es wird nur der erste gefundene Name in $ PATH zurückgegeben ... Dieser Name ist möglicherweise ein symbolischer Link und nicht die eigentliche ausführbare Datei am Kettenende .
whichgibt die ausführbare Datei ( nicht unbedingt) zurück. Es gibt den ersten passende Datei Namen es in dem $ PATH findet (oder mehrere gleichnamigen Dateien bei der Verwendung which -a) ... Die tatsächliche ausführbare entfernt mehrere Links sein kann.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' Der Befehl, der die eigentliche ausführbare Datei findet readlink -e, lautet
(in Verbindung mit which)
readlink -e $(which locate)/usr/bin/mlocate So zeigen Sie alle Zwischenlinks an :
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate
Du kannst es versuchen:
whereis ls
Es gibt mir:
ls: /bin/ls /usr/share/man/man1/ls.1.gz