0

我在 Linux 的控制台模式下使用 InstallAnywhere 进行安装,并希望在完成安装后运行一些交互式 shell 脚本。“交互式”是指脚本应该提出一些问题并接收用户输入。

我尝试使用“执行目标文件”操作运行它,但脚本不会向控制台打印任何内容(它肯定会执行,因为将调试信息打印到输出文件)。我还尝试使用“fg %1”(这是 InstallAnywhere 中的最后一个命令)将脚本置于前台,但它也不起作用。

有没有办法在控制台模式下通过 InstallAnywhere 执行交互式脚本?

4

1 回答 1

0

与其使用 shell 脚本进行用户交互,不如利用 IA 收集您需要的答案,将它们填充到 IA 变量中,然后在一个或多个“执行脚本/批处理文件”操作中使用这些变量来完成安装后的工作。

假设您想收集名字、姓氏和电话,然后将它们写入安装目录中的文件(我知道这是人为的,但希望是示范性的)。

  1. 添加跳转标签并将其命名为“获取用户信息”
  2. 添加控制台操作“获取用户输入”以读取名字。将结果分配给$FIRST_NAME$
  3. 添加控制台操作“获取用户输入”以读取姓氏。将结果分配给$LAST_NAME$
  4. 添加控制台操作“获取用户输入”以读取电话号码。将结果分配给$PHONE_NUMBER$
  5. 添加“跳转到目标”动作和“获取用户信息”的下一个跳转动作(#1,上面)。添加规则以验证这三个变量,以便TRUE结果将执行跳转到“获取用户信息”。换句话说,一个 BAD first name 或 BAD last name 或 BAD phone number 应该评估为TRUE。这会将用户发送回“获取用户信息”目标标签。三个有效值应评估为假,从而不执行跳转。我知道。有点奇怪。
  6. 最后,根据需要为每个目标安装平台添加尽可能多的“执行脚本/批处理文件”操作。对于这些操作中的每一个,添加一条规则,将该操作的执行限制到特定平台。对于 Unix/Linux 操作,请务必选中“不要替换未知变量”复选框,否则 IA 会将您的脚本变量替换为空白。(注意事项:使用完整的变量名形式${MY_VARIABLE_NAME}来帮助 IA 将您的变量与其自己的变量区分开来)。

Unix/Linux 版本可能如下所示:

#!/bin/sh
echo <<EOF
Name: $FIRST_NAME$ $LAST_NAME$
Phone: $PHONE_NUMBER$
EOF > $USER_INSTALL_FOLDER$$/$userName.txt

Windows 版本类似:

echo "Name: $FIRST_NAME$ $LAST_NAME$" > $USER_INSTALL_FOLDER$$/$userName.txt
echo "Phone: $PHONE_NUMBER$" >> $USER_INSTALL_FOLDER$$/$userName.txt

请注意使用$/$哪个 IA 转换为当前平台的适当路径分隔符。

在“执行脚本/批处理文件”操作之后,您可以添加评估脚本/批处理文件是否成功的步骤。在“跳转到目标”操作上添加规则以评估$EXECUTE_EXITCODE$. $EXECUTE_EXITCODE$是“执行脚本/批处理文件”操作存储进程退出代码的默认变量。

现实生活中的安装脚本可能比这更复杂。您可以收集任意数量的变量并在任意数量的安装后脚本中使用它们。这些脚本然后专注于完成工作,而不是与用户交谈。那应该是IA的工作。

两个分手的想法:

首先,同样的技术也可以用于 GUI 安装程序。事实上,在同一个项目中混合 GUI 和控制台输入操作会将您的安装程序扩展到图形和控制台目标平台。无论您如何收集输入,安装后脚本都保持不变。

最后,您应该在预安装期间提出您的问题(如果可能)。这样,如果他们不能或不会回答问题,用户可以决定放弃安装。如果用户不愿意或无法提供您需要的信息,则在安装后提出问题可能会使安装挂起,或迫使用户回滚。

于 2013-05-29T00:30:01.403 回答