假设我需要使用安装一个包dpkg -i
,它会提示用户输入一些值,例如用户名和密码。
我可以轻松地从终端完成此操作并继续安装。
但是按照这个计划,我无法自动执行安装,例如,如果我想编写一个脚本来安装以交互方式获取参数的包。
所以我想要一个交互式的 dpkg 安装计划(提示输入用户名和密码),但仍然可以从脚本调用,以便安装过程自动化。
我该怎么做?还有其他选择吗?
答案1
您可以使用 debconf-utils 包中的工具创建预配置文件。您可以使用以下命令手动创建预配置文件:
<owner> <question> <type> <value>
或者例如:
my-package username string Bob
my-package password string I$aN1ceGuy
更简单的方法是将其安装在您的机器上并运行:
debconf-get-selections | grep my-package
使用输出创建文件。
获得文件后,使用:
debconf-set-selections <filename>.
dpkg -i my-package
文件名中列出的选择将被默认使用,并且软件包将静默安装。
答案2
对于这样的事情你可以写一个expect
脚本。处理起来并不困难。
首先你必须安装解释器:
apt-get install expect
然后你可以写类似这样的内容:
#!/usr/bin/expect -f
set timeout 30
set password "pass"
set username "user"
#run the command
spawn dpkg -i package.deb
# Look for username prompt
expect "*?sername:*" #<--- this statement is important it wait's for a prompt "username:"
send "$username\r"
# Look for passwod prompt
expect "*?assword:*" #<--- the same with the "password:" prompt
send "$password\r"
#dpkg -i continues
当然,该脚本必须是可执行的。预计非常适合通过脚本(ssh,ftp,...)控制交互式终端程序