2011-03-17 84 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