apt-get install 在 DEBIAN_FRONTEND=noninteractive 下不起作用

有甚麼問題嗎?

假如有以下这样的脚本。

export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get install -y -qq keyboard-configuration

在没有图形界面的计算机上,如Travis和Docker,在进行使用apt-get安装应用程序时,由于不希望进行交互操作,可以通过设置环境变量DEBIAN_FRONTEND=noninteractive来禁用。

然而,这段代码在Ubuntu Trusty(14.04)上可以正常运行,但是在Xenial(16.04)上尝试后,会在中途要求交互操作,导致在像Travis等无法输入键盘的环境中无法继续进行下去。

由于

升级至root权限时,环境变量未被继承是原因所在。

当在Xenial系统中使用”man sudo”命令时,

-E(保留环境)选项会取消sudoers(5)中的env_reset选项,只会在匹配的命令具有SETENV标签或者sudoers(5)中设置了setenv选项时才可用。

根据我所知,这个选项在Trusty之前就已经存在了。虽然不指定这个选项,环境变量也应该会隐式地被传递下去(例如PATH等),但似乎从Xenial开始,如果不明确地指定sudo -E,环境变量就不再被传递下去了。

解决

export DEBIAN_FRONTEND=noninteractive
sudo -E apt-get update
sudo -E apt-get install -y -qq keyboard-configuration