我最近知道开发者工具在gitpod.io我想用这个管理器安装不同的 Java 版本。但我的 sdkman 版本很旧。所以我需要更新它,然后安装 Java。但我不想在 gitpod 中的每个存储库中输入这些命令。这就是为什么我编写了一个 shell 脚本prerequisites.sh
,我将在每个存储库中使用此文件。脚本是:-
sdk update
sdk install java 17-open
# there are lots of command under this, but they're not necessary in this question.
但后来我知道更新 sdkman 后,我需要重新启动终端。我发现这exec bash
会重新启动终端。但是当我添加exec bash
我的 shell 脚本时,它不会执行exec bash
命令下面的命令。有人能建议我怎么做吗?
sdk update
exec bash #recently added, but doesn't execute the commands after it :(
sdk install java 17-open
答案1
您遇到的问题是,当您打开新 shell 或重新启动当前 shell 时,您的脚本将不再加载到新 shell 中。因此,您需要做的是:
- 打开父 shell
- 执行第一个命令
- 在父脚本中创建子 shell
- 这个子 shell 将加载新的环境参数
- 在子 shell 中执行第二条命令
- 退出子 shell
- 退出父 shell
对于上面提到的命令,您可以使用类似的命令。
#!/bin/bash
sdk update
sudo su - $USER -c 'sdk install java 17-open'
第一个命令将在父 shell 中运行。第二行(使用 sudod su - $USER)将在同一个脚本中打开一个新的子 shell,并执行第二个命令。
PS:如果你没有为 sudo 配置“NOPASSWD”,系统会要求你输入密码。检查这进行设置。