[英]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.