Der zu verwendende Befehl variiert von Shell zu Shell.
Nur eine eingebaute Shell wird einem korrekt sagen, was die Shell für einen bestimmten Befehlsnamen tun wird, da nur eingebaute Aliase vollständig über Aliase, Shell-Funktionen, andere eingebaute Funktionen und so weiter Bescheid wissen können. Denken Sie daran:Nicht alle Befehle entsprechen in erster Linie ausführbaren Dateien.
-
Für die Bourne Again-Shell
bash
, der eingebaute ist dertype
Befehl:$ type '[' [ is a shell builtin
-
Für die Fischschale,
fish
, Dietype
builtin funktioniert ähnlich wie bash. Um nur den Pfad zu einer ausführbaren Datei zu erhalten, verwenden Siecommand -v
:$ type cat cat is /bin/cat $ command -v cat /bin/cat
-
Für die Korn-Shell
ksh
, der eingebaute ist derwhence
Befehl — mittype
zunächst als gewöhnlicher Alias fürwhence -v
eingerichtet und diecommand
eingebaut mit-v
Option entsprichtwhence
:$ whence -v ls ls is a tracked alias for /bin/ls
-
Für die Z-Shell
zsh
, der eingebaute ist derwhence
Befehl, mit demcommand
eingebaut mit-v
Option entsprichtwhence
und die eingebautentype
,which
, undwhere
Äquivalent zuwhence
mit den Optionen-v
,-c
, und-ca
bzw..$ whence ls /bin/ls
-
Für die TC-Shell
tcsh
, der eingebaute ist derwhich
Befehl – nicht zu verwechseln mit einem externen Befehl mit diesem Namen:> which ls ls: aliased to ls-F > which \ls /bin/ls
Weiterführende Literatur
- https://unix.stackexchange.com/questions/85249/
Sie können which
verwenden dazu:
[email protected]:~$ which ls
/bin/ls
Es funktioniert durch Suchen nach PATH
für ausführbare Dateien, die mit den Namen der Argumente übereinstimmen. Beachten Sie, dass dies nicht mit Shell-Aliassen funktioniert:
[email protected]:~$ alias listdir=/bin/ls
[email protected]:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
[email protected]:~$ which listdir
[email protected]:~$
type
, funktioniert jedoch:
[email protected]:~$ type listdir
listdir is aliased to `/bin/ls'
which
tut nicht (notwendigerweise) die ausführbare Datei zurückgeben. Es gibt den ersten übereinstimmenden Datei-Namen zurück es findet im $PATH (oder mehreren gleichnamigen Dateien, wenn which -a
verwendet wird )... Das eigentliche ausführbare Datei kann mehrere Links entfernt sein.
which locate
/usr/bin/locate
`file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
Der Befehl, der das aktuelle findet ausführbar ist readlink -e
,
(in Verbindung mit which
)
readlink -e $(which locate)
/usr/bin/mlocate
Um alle zwischengeschalteten Links zu sehen :
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