我正在尝试使用“脚本结果”要求来检查特定进程是否正在运行,以便在安装开始之前向用户发送消息。我的脚本是一个 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;
}
现在我唯一的问题是,这仅在我通过绝对路径指向我的脚本时才有效。显然,这给安装人员带来了问题。