我试图build立一个shell脚本来自动安装几个软件包到Ubuntu 10.04服务器上,而且我遇到了proftpd-basic的问题。
我正在使用命令行
apt-get -qy install proftpd-basic >/tmp/install.log
对于大多数软件包,这种方法可以正常工作,但是proftpd-basic似乎需要一些交互(它询问是否执行inetd或独立安装)。
是否有可能以某种方式在命令行上预先select此选项,因为我不希望用户被这个问题困扰? – 有关信息,如果重要,我想select“独立”选项。
编辑:
该过程的交互部分不仅仅需要简单的y / n答案,它需要我使用箭头键导航到我想要的选项,要求我按Enter键进行select。 这可能对解决这个问题有一定的影响。
你可以“预先”答案,这样debconf就会发现你已经回答了这个问题,而且不用再问它了。
您需要使用debconf-utils包中的一些工具:
sudo apt-get install debconf-utils
安装程序并手动回答一次问题。 然后,你可以问debconf在它的数据库中存储了什么:
debconf-get-selections | grep proftpd-basic
该信息可以input到debconf-set-selections (通过pipe道或从文件中读取)。
华纳的答案是更多的跨平台(debconf是一个Debian和衍生技术),但并不总是在版本之间工作,如果问题改变; 或者如果您有一些debconf问题,只有在您安装了其他软件包时才会被询问。
有这样的事情有各种不同的解决scheme。 我更喜欢shell脚本,其他人可能更喜欢其他方法。
为了与需要input的东西进行交互,并且没有标志来指定答案,可以redirectinput。 在使用这种方法之前,我会先阅读apt-get的联机帮助页面 ,因为它可能对您正在指定的内容有本地支持。 例如:
apt-get -qy install proftpd-basic <<** RESPONSES GO HERE **
你也可以使用像预期的东西。 有些客户端并不总是处理inputredirect,无需额外的努力。
对于日志logging,可以在运行主脚本时使用tee和redirectSTDERR和STDOUT。 例:
bash -x script.sh 2>&1 | tee script.log
我经常喜欢用set -x运行bash。 对于构build脚本,我更喜欢冗长的输出。