我正在尝试使用“脚本结果”要求来检查特定进程是否正在运行,以便我可以在安装开始之前向用户发送消息。
我的脚本是一个 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 语句中的表达式永远不会评估为真。所以,我假设这是我的问题。但是,我不知道如何绕过它,因为此代码是由 PackageMaker 生成的。

更新
我决定在这是 PackageMaker 中的错误的印象下工作,并且接近解决方法。我没有使用“脚本结果”要求,而是使用“Javascript结果”要求,并构建了一个看起来像的 Javascript 函数
function my_check() {
    code = system.run('path/to/script/myscript.sh');
    return code == 0;
}
现在我唯一的问题是,这只在我通过绝对路径指向我的脚本时才有效。显然,这给安装人员带来了问题。

最佳答案

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

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

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

正如您所期望的那样 exit 1 应该替换为 $(exit 0)

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

关于PackageMaker "Result of Script"要求从未通过,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5346446/

10-13 08:13