我正在编写一个 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