簡體   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