繁体   English   中英

为什么使用完整路径访问命令与仅通过命令名称不同?

[英]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 中看到它。


这是一个人为的示例来演示typewhich之间的区别(在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM