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