我正在尝试找出如何定义特定命令。我检查了$PATH
的所有位置,找不到任何名为my command的文件,所以它似乎是其他的。
以下是使用nvm的示例,它不是可执行文件:
me@MacBook:~$ which cat
/bin/cat
me@MacBook:~$ which nvm
me@MacBook:~$ nvm --version
0.33.8
which nvm
根本不返回任何内容。
在基于unix的系统中,这样的命令的“which”相当于什么?
答案 0 :(得分:7)
您要查找的命令是type
。
type nvm
将显示shell将如何解释命令,因此与which
不同,它还会显示别名,函数和未导出的路径。
答案 1 :(得分:3)
Here是对simiar问题的回答,该问题建议不要使用which
,原因与此问题无关。
那就是说,你假设which
只能看到可执行文件是错误的。
但是,默认情况下它不会看到函数和别名。
这就是为什么手册页上写着:
使用此实用程序的推荐方法是添加别名(C shell)或shell函数(Bourne shell),如下所示:
[ba]sh:
which () {
(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}
export -f which
如果您在.bashrc
中定义此功能并重新获取,则应该可以
which -a
它也应该为你提供函数和别名。
但是,请注意,如果某个配置文件或bashrc已经为which
定义了一些优先级(您可以通过type -a which
btw找到它。)
如果我定义了一个名为something
的脚本,一个函数和一个别名type -a
:
type -a something
something is aliased to `echo "something"'
something is a function
something ()
{
echo "function something"
}
something is /home/myself/bin/something
创建函数后which -a
给我:
which -a something
alias something='echo "something"'
/usr/bin/echo
/bin/echo
something ()
{
echo "function something"
}
~/bin/something