2013-03-01 51 views
0

在繼續安裝之前,我想檢測計算機上是否安裝了某些庫,但無法正常運行。在啓動時運行腳本的不同結果

我有以下shell腳本:

#!/bin/bash 

verify_distro(){ 
CHECK_IF_PACKAGE=`dpkg -s ia32-libs` 
result=`echo $?` 
echo ${result} 
if [ ${result} == 0 ]; then 
    echo "ia32-libs installed" 
    return 0 
else 
    echo "not installed" 
    return 1 
fi 
} 

verify_distro 

如果我安裝了IA32-庫,並用手在控制檯中運行它,然後做一個echo $?查看輸出我得到的退出代碼0應有盡有已正確安裝。

我已將此腳本設置爲在安裝的啓動階段運行,即在請求特權步驟之後運行,並設置爲等待終止和輸出流。爲了讓我能夠停止安裝程序,我還將失敗策略設置爲「作爲用戶是否重試或退出失敗」。

問題是,儘管安裝了軟件包,腳本仍然失敗,安裝程序詢問是繼續還是退出。

我不知道如何解決這個問題,所以我可以停止安裝程序,如果某些先決條件不滿足。或者有沒有更好的方法來實現這一目標?

+0

無論您是手動還是從安裝程序運行,返回值是否存在差異?您是否檢查過.install4/installation.log中記錄的返回值?此外,您可能會將「運行可執行文件」操作的輸出重定向到日誌文件,以檢查腳本是否正確執行。 – 2013-03-03 11:16:16

+0

@IngoKegel,問題源於腳本無法在啓動階段運行,在它被複制到安裝的目錄之前。 如果我在註冊添加/刪除項目階段之後(或者在安裝文件階段之後的任何地方)運行腳本,它將正確運行。 在佈局文件被複制之前,是否有任何方法可以讓腳本運行**?例如,我希望在啓動安裝程序時將其作爲第一步運行,以便用戶立即得到缺少依賴關係的警告,而不是在安裝結束時發出警告。 – 2013-03-04 14:36:22

+0

行了,請看我的回答 – 2013-03-04 14:54:39

回答

0

添加的腳本文件Installer->自定義代碼&資源,然後指定

${installer:sys.resourceDir}/scriptName.sh 

爲「可執行文件」屬性或「運行可執行文件或批處理文件」的行動。

這也將在「啓動」節點中工作。

0

儘量消除檢查其它腳本輸出的代碼沒用行:

#!/bin/bash 

verify_distro(){ 

    dpkg -s ia32-libs > /dev/null 

    if [ $? == 0 ]; then 
     echo "ia32-libs installed" 
     return 0 
    else 
     echo "not installed" 
     return 1 
    fi 

} 

verify_distro 
+0

不幸的是,它有同樣的問題;儘管庫被觸發,我仍然得到錯誤。 – 2013-03-01 16:54:44

0

你不說完全運行在啓動該腳本時是什麼錯誤。可能是你的shell的PATH尚未初始化,在這種情況下,腳本將無法找到「dpkg」可執行文件。如果實際上存在問題,則指定dpkg的完整路徑,例如「/ usr/bin/dpkg -s ia32-libs」可以解決這個問題。

+0

問題在於腳本未執行。看到我的評論[這裏](http://stackoverflow.com/questions/15157506/different-result-from-script-ran-at-startup#comment21425234_15157506)。 – 2013-03-04 14:38:42