5

我刚刚安装了sdkman用于在我的机器(MacOS)上安装 grails。当我运行which sdk命令时,我没有得到任何输出。但是当我运行sdk help命令时,shell 能够解决它并给出正确的输出。我检查了 $PATH 环境变量中提到的所有目录,但找不到任何可执行文件sdk。所以我的问题是shell如何能够解析sdk命令?

注意:我还检查了 Ubuntu,我看到了相同的行为。

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

2

好的。所以我发现了。正如上面评论中提到的@that-other-guy,我使用type -a了而不是which,这表明它是一个定义的函数。

于 2017-07-09T02:47:15.000 回答
2

正如您正确提到的,“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 上已安装的命令时没有选择它的原因

于 2018-11-13T05:06:36.643 回答