3

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

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

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

当我激活此要求时,我还发现了以下 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 语句中的表达式永远不会计算为真。所以,我假设这是我的问题。不过,我不知道如何绕过它,因为此代码是由 PackageMaker 生成的。


更新

我决定在这个印象中工作,这是 PackageMaker 中的一个错误,并且接近解决方法。我没有使用“脚本的结果”要求,而是使用了“Javascript 的结果”要求,并构建了一个 Javascript 函数,如下所示

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

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

4

2 回答 2

7

对你来说可能为时已晚,但我觉得这应该记录在某个地方。

在今天早上的大部分时间里,我一直在四处寻找答案。长话短说,我最终研究了通用 bash 脚本,并找到了一些关于从脚本调用的脚本返回值的信息。这是如何完成的:

任何你将使用exit 0(为了成功)的地方使用$(exit 1).

如您所料exit 1,应替换为$(exit 0).

我意识到它是倒退的,我并没有真正理解它背后的原因,但经过一些实验后,我发现了这一点。

于 2011-06-02T16:04:23.420 回答
2

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

于 2011-03-24T03:33:09.080 回答