来自InstallAnywhere的交互式shell脚本,处于控制台模式

时间:2013-04-14 15:42:04

标签: linux console installanywhere

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

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

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

1 个答案:

答案 0 :(得分:0)

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

假设您要收集名字,姓氏和电话,然后将其写入您的安装目录中的文件(我知道,但我很有希望,但希望能够进行说明)。

  1. 添加跳转标签,并将其命名为“获取用户信息”
  2. 添加控制台操作“获取用户输入”以读取名字。将结果分配给$FIRST_NAME$
  3. 添加控制台操作“获取用户输入”以读取姓氏。将结果分配给$LAST_NAME$
  4. 添加控制台操作“获取用户输入”以阅读电话号码。将结果分配给$PHONE_NUMBER$
  5. 使用“获取用户信息”的上一跳动作添加“跳转到目标”操作(上面的#1)。添加规则以验证这三个变量,以便TRUE结果将执行跳转到“获取用户信息”。换句话说,BAD名字或BAD姓氏或BAD电话号码应评估为TRUE。这将使用户返回“获取用户信息”目标标签。三个有效值应评估为false,从而不执行跳转。我知道。这很奇怪。
  6. 最后,根据需要为每个目标安装平台添加尽可能多的“执行脚本/批处理文件”操作。对于其中每个操作,添加一个规则,将该Action的执行限制为特定平台。对于Unix / Linux操作,请务必选中“不替换未知变量”复选框,或者IA将使用空格替换您的脚本变量。 (注意事项:使用完整的变量名称形式${MY_VARIABLE_NAME}来帮助IA区分变量和自己的变量)。
  7. 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和控制台输入操作会将安装程序扩展到图形和控制台目标平台。无论您如何收集输入,安装后脚本都保持不变。

    最后,您应该在预安装期间提出问题(如果可能)。这样,如果用户不能或不会回答问题,他们可以决定保释安装。如果他们不愿意或无法提供您需要的信息,那么在安装后询问问题可能会导致安装停止,或强迫用户回滚。