2011-03-17 32 views
3

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

#!/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一个bug下工作,并且很接近的解决方法。而不是使用规定“的脚本结果”,我使用的规定“Javascript的结果”,并建立了一个JavaScript函数看起来像

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

现在我唯一的问题是,这将只有当我点上班我的脚本通过绝对路径。显然这对安装程序造成了问题。

回答

2

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

7

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

今天早上大部分时间我都在四处寻找答案。长话短说我最终在寻找通用bash脚本,并且发现了一些有关从脚本调用的脚本返回值的信息。以下是它可以做到的:

你会使用的任何地方exit 0(成功)使用$(exit 1)

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

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

+1

谢谢凯文!对我来说已经太迟了:-)但我希望这可以帮助其他人,因为它当然不直观。 – evanflash 2011-09-13 22:58:41

+1

谢谢!帮助过我 - 其他人。 – elsamuko 2013-03-18 21:15:01