3

「スクリプトの結果」要件を使用して、特定のプロセスが実行されているかどうかを確認しようとしています。これにより、インストールが開始される前にユーザーにメッセージを送ることができます。私のスクリプトは、失敗の場合は 1、成功の場合は 0 を返すシェル スクリプトです。私が抱えている問題は、戻り値に関係なく、インストーラー フローがそれを失敗と解釈していることです。私は信じられないほど単純なスクリプトを使用していません。

#!/bin/bash
echo "script starting">> /tmp/myfile
true

(エコーは、スクリプトが実際に実行されていることを確認するためのものです)。最後の行を多くのもの (exit 0、exit 1、「true」、「TRUE」) に置き換えてみましたが、テストに合格する結果はありません。

また、この要件を有効にすると、distribution.dist に追加される次の JavaScript コードも発見しました。

<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;
}

私の唯一の問題は、絶対パスを介してスクリプトを指定した場合にのみ機能することです。明らかに、これはインストーラーに問題を引き起こします。

4

2 に答える 2

7

おそらく手遅れですが、これはどこかに文書化する必要があると思います。

私は今朝のほとんどの間、これに対する答えを探していました。簡単に言えば、一般的なbashスクリプトを調べたところ、スクリプトによって呼び出されたスクリプトから値を返すことに関する情報が見つかりました。方法は次のとおりです。

exit 0(成功のために)使用する場所ならどこでも使用します$(exit 1)

ご想像のとおり、exit 1に置き換える必要があります$(exit 0)

私はそれが逆であることに気づき、その背後にある理由を実際には理解していませんが、いくつかの実験の後、それが私が見つけたものです.

于 2011-06-02T16:04:23.420 に答える
2

まあ、これは質問に対する正確な答えではありませんが、最終的には私の問題の解決策になりました. Packagesと呼ばれるこのフリーウェア パッケージ ユーティリティは、「スクリプトの結果」機能をサポートし、パスを正しく処理します。残念ながら、それが作成するパッケージは、OS 10.5 以降とのみ互換性があります。10.4 をサポートするために、PackageMaker を使用して別のインストーラーを作成していますが、「スクリプトの結果」の要件はスキップしています。

于 2011-03-24T03:33:09.080 に答える