【问题标题】:Unable to install sdkman on macosmacos无法安装sdkman
【发布时间】:2020-10-23 02:55:18
【问题描述】:

我无法在我的 macos 上安装 sdkman。我提到了sdkman installCan't install sdkman on Mac OS。不过,我还是错过了一些东西。有人可以帮帮我吗 ?我是 MacOS 和 sdkman 的新手。

当我进入 bash 终端并输入 curl -s "https://get.sdkman.io" | bash 时,它会打印消息 failed to write body on terminal 并打开我的 bash 配置文件。我接下来应该做什么?我尝试按照上述网址中提到的步骤进行操作,甚至按照建议使用了source,但我想有些东西不见了。实际上我从来没有在 bash 配置文件中写过任何东西,所以source 甚至不会做任何事情。我使用我在网上找到的内容进行了多次尝试,但sdk version 从未给出任何输出,它一直说sdk command not found。我在网上发现我需要升级curl,我什至这样做了仍然没有成功。有人可以为我写/解释我失踪的步骤吗?我会很感激。我确实在网上搜索过,但要么步骤不清楚,要么我没有做对。谢谢。

【问题讨论】:

    标签: bash macos sdk sdkman


    【解决方案1】:

    看起来更有可能是管道 bash 在前一个 curl 完成写入整个页面之前关闭了读取管道。当你发出curl -s "https://get.sdkman.io" | bash 时,只要管道 bash 有它想要的东西,它就会立即关闭前一个 curl 的输入流。但是 cURL 并没有真正预料到这一点,并引发了“失败的写作主体”错误。您可能想尝试通过一个中间程序来管道流,该程序总是在输入 bash 之前读取整个页面。例如,您可以尝试这样的事情(在管道到 bash 之前运行 tac 两次):

    curl -s "https://get.sdkman.io" | tac | tac | bash
    

    tac 是一个 Unix 程序,可以反向连接和打印文件。在这种情况下,它读取整个输入页面并反转行顺序(因此我们运行了两次)。因为它必须读取整个输入才能找到最后一行,所以在 cURL 完成之前它不会向 bash 输出任何内容。 bash 在获得所需内容时仍会关闭读取流,但它只会影响 tac,不会引发错误。

    【讨论】:

    • 非常感谢。现在没有出现错误写入正文。但是当我将 curl 命令与 tac 一起使用时,它会打开 bash 配置文件,现在我应该做什么,这就是我的问题。我关注的网络链接上的说明并不是很清楚。网络链接说,source "$HOME/.sdkman/bin/sdkman-init.sh",即使我在终端上输入该命令,也没有任何反应。