[英]Why is accessing a command using the full path different than through just the command name?
我在路径中添加了节点。 我的理解是我正在使用以下命令调用相同的命令:
$ node --version
v10.24.1
$ which node
/usr/local/bin/node
$ /usr/local/bin/node --version
v14.17.0
我的问题是为什么版本不同?
which
将检查PATH
,但在 Bash 中它不知道内置函数、别名或函数。 相反,使用type
更安全,这样可以避免这些陷阱。
在您的示例中,最可能的解释是node
是别名或 function。 type node
应该给你一个线索什么被执行,但显然它与/usr/local/bin/node
不同的二进制文件。
作为替代方案,您可以启用日志记录:
$ set -x
$ node
如果它是别名或 function,您应该在 output 中看到它。
这是一个人为的示例来演示type
和which
之间的区别(在 Arch Linux 上执行):
$ node --version
v16.2.0
$ node () {
echo "v99.9.9"
}
$ node --version
v99.9.9
$ which node
/usr/bin/node
$ /usr/bin/node --version
v16.2.0
$ type node
node is a function
node ()
{
echo "v99.9.9"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.