我有一个服务器构建脚本,它使用 apt-get 安装软件包。然后它将预先编写的配置文件直接放到位,因此不需要诸如 postfix 之类的软件包中的交互式安装后配置对话框。我如何跳过安装的这个阶段?它会产生一些我宁愿避免的手动干预。
我知道这个-qq
选项,但手册页警告不要在未指定无操作修饰符的情况下使用它。我做想要执行某个动作,我只想抑制其中的特定部分。
答案1
为避免这种情况,您可以采取一些措施。将变量设置DEBIAN_FRONTEND
为noninteractive
并使用-y
标志。例如:
export DEBIAN_FRONTEND=noninteractive
apt-get -yq install [packagename]
如果需要通过 sudo 安装,请使用:
sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
答案2
我发现设置在某些情况下不起作用,-yqq
最后停顿DEBIAN_FRONTEND=noninteractive
apt-get
Restarting the system to load the new kernel will not be handled automatically, so you should consider
rebooting. [Return]
直到您按下键后它才会退出enter
。
我的解决方案是按照其他人建议的方式进行,同时使用yes
管道传输,apt-get
如下所示
yes | sudo DEBIAN_FRONTEND=noninteractive apt-get -yqq purge 'my-package'
答案3
如果您要在自动堆栈中定期运行这些命令,您可以apt
在 bash 脚本中将其重新定义为一个函数,这样您就不必记住所有内容:
## apt ##
function apt {
export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
command /usr/bin/apt --yes --quiet --option Dpkg::Options::=--force-confold --option Dpkg::Options::=--force-confdef "$@"
}
或者更好的是,只是将其重命名为喜欢my_apt
或其他名称。
然后它可以在子函数中使用,下面是我们在SlickStack:
## ss_apt_update ##
function ss_apt_update {
apt update > /dev/null 2>&1
}
## ss_apt_upgrade ##
function ss_apt_upgrade {
apt upgrade > /dev/null 2>&1
}
## ss_apt_full_upgrade ##
function ss_apt_full_upgrade {
apt full-upgrade > /dev/null 2>&1
}