![在 Ubuntu 的 shell 脚本中指定答案](https://linux22.com/image/185460/%E5%9C%A8%20Ubuntu%20%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%8C%87%E5%AE%9A%E7%AD%94%E6%A1%88.png)
所以我试图制作一个标准的 shellscript 来安装一些对我有用的标准软件,如 net-tools、OpenSSH、Omada Controller 等。由于 TP Link Omada 控制器软件的标准 .deb 需要一些额外的命令来正确配置才能启动。其中之一是命令
update-alternatives --config java
这给了我一个带有三个选项的提示,0、1和2。答案必须是2。总是,或者至少在现在发布的版本中。
这就是我现在在控制器脚本中所拥有的内容,我计划将它们全部放在“while”语句中,以提示用户是否想要安装而不是自动安装。如果 printf 一切都像我希望的那样工作,则可以删除它。
#install omada controller
cd /tmp
apt -y install gdebi-core
apt -y install openjdk-8-jdk
printf ${RED}"----------------------------\n\nPress 2 in this next prompt\n\n----------------------------\n"${NC}
update-alternatives --config java
wget https://static.tp-link.com/2020/202012/20201211/omada_v4.2.8_linux_x64.deb
export JAVA_HOME=/usr/lib/jvm/default-java
echo $JAVA_HOME
gdebi omada_v4.2.8_linux_x64.deb
有没有办法将其放入 Shell 脚本中?我已经看到了在 CLI 中执行脚本的同一行中指定答案的方法,但这不是我想要的。我想使其完全自动化,仅使用某些安装过程中已有的提示并提示安装提到的软件包。
答案1
您可以将此交互式--configue
选项拆分为两个静默选项:--query
和--set
:
update-alternatives --query <package>
要安装/删除替代包,您可以使用--install
和--remove
选项。
显示配置的包update-alternatives
设置优先级:
update-alternatives --set <package> <PATH>
该gdebi
命令可以执行如下:
LANG=en_US.UTF-8 yes |gdebi omada_v4.2.8_linux_x64.deb
答案2
您可以使用 来回答提示expect
。您可以从 bash 调用不同的 Expect 脚本,也可以在 bash 中实现 Expect 命令。
如果你安装了expect,你也会得到它autoexpect
,它会为你生成expect脚本,你可以从bash脚本中调用它。
如果您运行autoexpect update-alternatives --config java
它将正常启动该过程,然后您可以回答任何问题,一旦该过程完成,autoexpect 将生成期望脚本,该脚本会使用您在安装过程中所做的答案自动回答提示。
答案3
好吧,我成功了!或者至少是我要求的部分。仍然需要测试整个命令序列,但这就没问题了。多谢!下面是我现在所拥有的,预期的事情确实按预期工作(双关语