0

インストールを進める前に、特定のライブラリがコンピュータにインストールされているかどうかを検出したいのですが、正しく動作させることができません。

次のシェルスクリプトがあります。

#!/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-libs をインストールしてコンソールで手動で実行しecho $?、出力を確認するために実行すると、すべてが正しくインストールされているため、終了コード 0 が返されます。

このスクリプトは、インストールの起動段階で、権限の要求ステップの直後に実行するように設定し、終了と出力ストリームを待機するように設定しました。インストーラーを停止できるようにするために、失敗戦略を「失敗時に再試行するか終了するかをユーザーとして」に設定しています。

問題は、パッケージがインストールされているにもかかわらず、スクリプトがまだ失敗し、インストーラーが続行するか終了するかを尋ねてくることです。

この問題を解決する方法がわからないので、特定の前提条件が満たされていない場合はインストーラーを停止できます。または、これを達成するためのより良い方法はありますか?

4

3 に答える 3

0

起動時にこのスクリプトを実行したときのエラーの正確な内容はわかりません。シェルの PATH がまだ初期化されていない可能性があります。その場合、スクリプトは「dpkg」実行可能ファイルを見つけることができません。実際にそれが問題である場合は、dpkg へのフル パスを指定すると、たとえば "/usr/bin/dpkg -s ia32-libs" と指定して問題を解決できます。

于 2013-03-01T19:02:37.733 に答える
0

Installer->Custom Code & Resource にスクリプトファイルを追加し、指定

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

「実行可能ファイル」プロパティまたは「実行可能ファイルまたはバッチ ファイルの実行」アクションの場合。

これは、「スタートアップ」ノードでも機能します。

于 2013-03-04T14:54:23.653 に答える
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
于 2013-03-01T12:22:29.800 に答える