例如,如果ls
作为输入传递,它应该告诉我如果在命令行上/bin/ls
运行它将会运行。ls
答案1
所使用的命令因 shell 而异。
只有 shell 内置命令才能正确地告知 shell 将针对给定的命令名执行什么操作,因为只有内置命令才能完全了解别名、shell 函数、其他内置命令等等。请记住:并非所有命令都与可执行文件相对应。
对于 Bourne Again shell
bash
,内置type
命令是:$ type '[' [ is a shell builtin
对于 Fish shell,
fish
,type
内置命令的工作方式与 bash 类似。若要获取可执行文件的路径,请使用command -v
:$ type cat cat is /bin/cat $ command -v cat /bin/cat
对于 Korn Shell
ksh
,内置命令是whence
—type
最初设置为 的普通别名whence -v
,command
内置选项-v
相当于whence
:$ whence -v ls ls is a tracked alias for /bin/ls
对于 Z Shell
zsh
,内置命令是whence
,command
内置命令的选项-v
相当于whence
,内置命令type
、which
和分别where
相当于whence
选项-v
、-c
和-ca
。$ whence ls /bin/ls
对于 TC Shell
tcsh
,内置命令是which
——不要与任何同名的外部命令混淆:> which ls ls: aliased to ls-F > which \ls /bin/ls
进一步阅读
答案2
你可以使用which
以下方法:
aix@aix:~$ which ls
/bin/ls
它通过搜索PATH
与参数名称匹配的可执行文件来工作。请注意,它不适用于 shell 别名:
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:~$
type
但是,确实有效:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
答案3
which
做不是(必然)返回可执行文件。它返回第一个匹配的文件姓名它在 $PATH 中找到(或使用时找到多个类似命名的文件which -a
)...实际的可执行文件可能需要经过多个链接。
which locate
/usr/bin/locate
`file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
查找命令实际的可执行文件是readlink -e
,
(与 结合which
)
readlink -e $(which locate)
/usr/bin/mlocate
要查看所有中间链接:
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
答案4
你可以试试:
whereis ls
它给了我:
ls: /bin/ls /usr/share/man/man1/ls.1.gz