我在 Linux 的控制台模式下使用 InstallAnywhere 进行安装,并希望在完成安装后运行一些交互式 shell 脚本。“交互式”是指脚本应该提出一些问题并接收用户输入。
我尝试使用“执行目标文件”操作运行它,但脚本不会向控制台打印任何内容(它肯定会执行,因为将调试信息打印到输出文件)。我还尝试使用“fg %1”(这是 InstallAnywhere 中的最后一个命令)将脚本置于前台,但它也不起作用。
有没有办法在控制台模式下通过 InstallAnywhere 执行交互式脚本?
我在 Linux 的控制台模式下使用 InstallAnywhere 进行安装,并希望在完成安装后运行一些交互式 shell 脚本。“交互式”是指脚本应该提出一些问题并接收用户输入。
我尝试使用“执行目标文件”操作运行它,但脚本不会向控制台打印任何内容(它肯定会执行,因为将调试信息打印到输出文件)。我还尝试使用“fg %1”(这是 InstallAnywhere 中的最后一个命令)将脚本置于前台,但它也不起作用。
有没有办法在控制台模式下通过 InstallAnywhere 执行交互式脚本?
与其使用 shell 脚本进行用户交互,不如利用 IA 收集您需要的答案,将它们填充到 IA 变量中,然后在一个或多个“执行脚本/批处理文件”操作中使用这些变量来完成安装后的工作。
假设您想收集名字、姓氏和电话,然后将它们写入安装目录中的文件(我知道这是人为的,但希望是示范性的)。
$FIRST_NAME$。$LAST_NAME$。$PHONE_NUMBER$。TRUE结果将执行跳转到“获取用户信息”。换句话说,一个 BAD first name 或 BAD last name 或 BAD phone number 应该评估为TRUE。这会将用户发送回“获取用户信息”目标标签。三个有效值应评估为假,从而不执行跳转。我知道。有点奇怪。${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 和控制台输入操作会将您的安装程序扩展到图形和控制台目标平台。无论您如何收集输入,安装后脚本都保持不变。
最后,您应该在预安装期间提出您的问题(如果可能)。这样,如果他们不能或不会回答问题,用户可以决定放弃安装。如果用户不愿意或无法提供您需要的信息,则在安装后提出问题可能会使安装挂起,或迫使用户回滚。