我刚刚安装了sdkman用于在我的机器(MacOS)上安装 grails。当我运行which sdk
命令时,我没有得到任何输出。但是当我运行sdk help
命令时,shell 能够解决它并给出正确的输出。我检查了 $PATH 环境变量中提到的所有目录,但找不到任何可执行文件sdk
。所以我的问题是shell如何能够解析sdk
命令?
注意:我还检查了 Ubuntu,我看到了相同的行为。
好的。所以我发现了。正如上面评论中提到的@that-other-guy,我使用type -a
了而不是which
,这表明它是一个定义的函数。
正如您正确提到的,“sdk”不是命令,它是由 sdkman-main.sh(在 ~/.sdkman/src 中)创建的声明函数,一旦从 ~/.sdkman/bin/sdkman-init.sh 调用
这就是为什么sdkman 的安装页面要求在每次加载 bash 配置文件时声明此功能的 .bash_profile 中附加以下步骤的原因:
#这必须在文件末尾,SDKMAN 才能工作!!!
[[ -s "/home/dudette/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dudette/.sdkman/bin/sdkman-init.sh"
这也是“which”命令在检查 linux PATH 上已安装的命令时没有选择它的原因