![如何在安装过程中从 shell 脚本选择交互式提示的响应](https://linux22.com/image/112393/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B%E4%B8%AD%E4%BB%8E%20shell%20%E8%84%9A%E6%9C%AC%E9%80%89%E6%8B%A9%E4%BA%A4%E4%BA%92%E5%BC%8F%E6%8F%90%E7%A4%BA%E7%9A%84%E5%93%8D%E5%BA%94.png)
我正在编写一个 shell 脚本,以便一次性在我的 Ubuntu PC 上安装所有需要的应用程序(同时我可以散步或做其他事情)。对于大多数应用程序来说,添加到-y
语句末尾apt-get install
可以很好地避免任何用户参与。我的脚本看起来像这样:
#!/bin/bash
add-apt-repository ppa:webupd8team/sublime-text-3 -y
apt-get update -y
apt-get upgrade -y
apt-get install synaptic -y
apt-get install wireshark -y
虽然我不再需要担心Do you want to continue? [Y/n]
or Press [ENTER] to continue or ctrl-c to cancel adding it
,但问题在于wireshark
,它需要对交互式提示做出响应,如下所示:
如何避免这种强制干预?
答案1
配置德布会议数据库:
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
然后,安装Wireshark:
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install wireshark
您可能还想抑制输出apt-get。在这种情况下:
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install wireshark > /dev/null
答案2
apt/dpkg 系统能够提供无人值守或非交互式安装。
这涉及将DEBIAN_FRONTEND
变量设置为noninteractive
并使用-y
标志。例如:
export DEBIAN_FRONTEND=noninteractive
apt-get -y install [packagename]
如果出现错误,您可能需要设置该q
选项以更强烈地说服dpkg
您实际上正在进行非交互式安装:DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
。
在某些情况下,按照稍后在同一脚本/shell 进程中安装的某些软件包的提示可能会更容易,在这种情况下,您可能希望取消导出变量DEBIAN_FRONTEND
:
unset DEBIAN_FRONTEND
对于配置选项的预先设置,debconf-utils
安装它很有用,这将使用以下命令debconf-get-selections
:
sudo apt-get install debconf-utils