PackageMaker“脚本结果”要求永远不会通过

时间:2011-03-17 23:18:08

标签: packagemaker

我正在尝试使用“脚本结果”要求来检查特定进程是否正在运行,以便我可以在安装开始之前向用户发送消息。 我的脚本是一个shell脚本,失败返回1,成功返回0。我遇到的问题是,无论我的返回值如何,安装程序流程都会将其解释为失败。我没有使用一个非常简单的脚本:

#!/bin/bash
echo "script starting">> /tmp/myfile
true

(回声是为了向自己保证脚本实际上正在运行)。我尝试用很多东西替换最后一行(退出0,退出1,“真”,“真”)但没有任何结果导致测试通过。

我还发现了以下JavaScript代码,当我激活此要求时,它会被添加到distribution.dist中。

<installation-check script="pm_install_check();"/>
<script>function pm_install_check() {
    if(!(system.run('path/to/script/myscript.sh') == true)) {
        my.result.title = 'Title';
        my.result.message = 'Message';
        my.result.type = 'Fatal';
        return false;
    }
    return true;
}
</script>

据我所知,if语句中的表达式永远不会计算为true。所以,我认为这是我的问题。不过,我不知道怎么解决这个问题,因为这段代码是由PackageMaker生成的。


更新

我决定让人觉得这是PackageMaker中的一个错误,并且接近于解决方法。我没有使用“脚本结果”的要求,而是使用了“Javascript的结果”要求,并构建了一个类似于Javascript的函数

function my_check() {
    code = system.run('path/to/script/myscript.sh');
    return code == 0;
}

现在我唯一的问题是,只有当我通过绝对路径指向我的脚本时,这才会起作用。显然这给安装人员带来了问题。

2 个答案:

答案 0 :(得分:7)

对你来说可能为时已晚,但我觉得应该在某处记录下来。

今天早上大部分时间我都在寻找答案。长话短说我最后看到了泛型bash脚本,我发现了一些关于从脚本调用的脚本中返回值的信息。以下是它的完成方式:

您使用exit 0(成功)的任何地方都使用$(exit 1)

正如您所期望的,exit 1应由$(exit 0)替换。

我意识到它是倒退的,我并没有真正得到它背后的推理,但经过一些实验,这就是我发现的。

答案 1 :(得分:2)

嗯,这不是问题的答案,但它确实最终解决了我的问题。这个名为Packages的免费软件包实用程序支持“脚本结果”功能并正确处理路径。不幸的是,它创建的软件包仅与OS 10.5及更高版本兼容。为了支持10.4,我正在使用PackageMaker构建一个单独的安装程序,但是跳过了“脚本结果”的要求。