我正在尝试使用“脚本结果”要求来检查特定进程是否正在运行,以便我可以在安装开始之前向用户发送消息。 我的脚本是一个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;
}
现在我唯一的问题是,只有当我通过绝对路径指向我的脚本时,这才会起作用。显然这给安装人员带来了问题。
答案 0 :(得分:7)
对你来说可能为时已晚,但我觉得应该在某处记录下来。
今天早上大部分时间我都在寻找答案。长话短说我最后看到了泛型bash脚本,我发现了一些关于从脚本调用的脚本中返回值的信息。以下是它的完成方式:
您使用exit 0
(成功)的任何地方都使用$(exit 1)
。
正如您所期望的,exit 1
应由$(exit 0)
替换。
我意识到它是倒退的,我并没有真正得到它背后的推理,但经过一些实验,这就是我发现的。
答案 1 :(得分:2)
嗯,这不是问题的答案,但它确实最终解决了我的问题。这个名为Packages的免费软件包实用程序支持“脚本结果”功能并正确处理路径。不幸的是,它创建的软件包仅与OS 10.5及更高版本兼容。为了支持10.4,我正在使用PackageMaker构建一个单独的安装程序,但是跳过了“脚本结果”的要求。