安装包,cli提示参数

use*_*475 5 command-line dpkg automation software-installation

假设我需要使用安装一个包dpkg -i,这会提示用户输入一些值,例如用户名和密码。

我可以轻松地从终端完成此操作并继续安装。

但是按照这个计划,我无法自动化安装,例如,如果我想编写一个脚本来安装以交互方式获取参数的包。

因此,我想要一个交互式的 dpkg 安装计划(提示输入用户名和密码),但仍然可以从脚本调用,以便安装过程自动化。

我该怎么办?还有其他选择吗?

小智 4

您可以使用 debconf-utils 包中的工具创建预配置文件。您可以使用以下命令手动创建预配置文件:

<owner> <question> <type> <value> 
Run Code Online (Sandbox Code Playgroud)

或者举个例子:

my-package username string Bob
my-package password string I$aN1ceGuy
Run Code Online (Sandbox Code Playgroud)

更简单的方法是将其安装在您的计算机上并运行:

debconf-get-selections | grep my-package
Run Code Online (Sandbox Code Playgroud)

使用输出创建文件。

获得该文件后,请使用:

debconf-set-selections <filename>.  
dpkg -i my-package
Run Code Online (Sandbox Code Playgroud)

默认情况下将使用文件名中列出的选择,并且软件包将静默安装。

http://www.debian.org/releases/stable/i386/apbs03.html.en


cha*_*aos 3

对于这样的事情,你可以编写一个expect脚本。处理起来并不是很难。

首先你必须安装解释器:

apt-get install expect
Run Code Online (Sandbox Code Playgroud)

然后你可以写这样的东西,例如:

#!/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
Run Code Online (Sandbox Code Playgroud)

当然,该脚本必须是可执行的。Expect非常适合通过脚本控制交互式终端程序(ssh、ftp...)