1

シェルスクリプトを使用して、ファイル内の文字列を検索し、その値を変数に返して、シェルスクリプトで操作できるようにしています。

Dojo ビルド スクリプトを使用していますが、このスクリプトは Dojo のバージョン番号を定義する必要があります。デフォルトでは、ビルド スクリプトはバージョン番号を 0.0.0.dev として定義します。私がやろうとしているのは、元の dojo ファイルで dojo.version の定義を検索し、その値を使用してコンパイル済みビルドのバージョン番号をその値に手動で設定することです。

助言がありますか?

4

2 に答える 2

0

バージョンをパラメーターとしてビルド スクリプトに渡すことで、バージョンをオーバーライドできます。

これは、bat ファイルを使用した Windows の例です。

build.bat profileFile=my.profile.js action=release releaseDir=../../../release/
 releaseName=rel copyTests=false optimize=comments 
 cssOptimize=comments version=THE_VERSION_YOU_WANT

この質問に対する私の回答は、バージョンをオーバーライドする ANT ビルドを示しています。

于 2012-06-21T15:38:18.937 に答える
0

としてフラグを立てているのでshell、それを bash にします。これは探すべき重要な正規表現です:dojo\.version[\ \t]*=[\ \t]*{

要するに; 以下は、私がテストした2つのバージョンでうまくいきます:

# grep -A20 includes comments, excluding these by following
flattenedlines=$(line=$(grep -nRe "dojo\.version[\ \t]*=[\ \t]*{" *); head -n `echo 20+$(echo $line|cut -d ":" -f2)|bc` $(echo $line|cut -d ":" -f1) | tail -n 21| grep -v "\/\/")
echo $flattenedlines | sed "s/'/\"/" | sed 's/.*major[\ \t]*:[\ \t]*\([0-9]*\).*minor[\ \t]*:[\ \t]*\([0-9]*\).*patch[\ \t]*:[\ \t]*\([0-9]*\).*flag[\ \t]*:[^"]*"\([^"]*\).*/\1 - \2 - \3 - \4/'
## result ## :"nMajor - nMinor - nPatch - szFlag"

私が個人的に調べた 2 つの異なるバージョンがあります。バージョン 1.4.0 と 1.7.2 は 2 つの異なるファイルを使用します (これは少なくとも 1.2 から 1.6 未成年者がターニング ポイントであるとかなり一貫していると思います)

このコマンドで dojo/_base/ ディレクトリーに移動します。これにより、開始するファイルと行番号、および見つかった式の後の行のサブセットが得られます。これは、圧縮されていない SDKが使用されているという事実に基づいています。

dojobase="/var/www/dojotoolkit/dojo"

#command will return similar to following
# for 1.4.2 : "_loader/bootstrap.js:208:    dojo.version = {"
# for 1.7.2 : "kernel.js:97:    dojo.version = {"
pushd $dojobase/dojo/_base
lines=$(grep -A20 -Re "dojo\.version[\ \t]*=[\ \t]*{" *)

これは解析するテキストです

    dojo.version = {
            // undefined
            // number of lines
            // with comments
            major: 1, minor: 7, patch: 2, flag: "",
            revision: rev ? +rev[0] : NaN,
            toString: function(){
                    var v = dojo.version;
                    return v.major + "." + v.minor + "." + v.patch + v.flag + " (" + v.revision + ")";      // String
            }
    };

バッファ$linesを次のようにします。

dojo.version = { _loader/bootstrap.js- // summary: _loader/bootstrap.js- // version number of dojo _loader/bootstrap.js- // major: Integer _loader/bootstrap.js- // Major version. If total version is "1.2.0beta1", will be 1 _loader/bootstrap.js- // minor: Integer _loader/bootstrap.js- // Minor version. If total version is "1.2.0beta1", will be 2 _loader/bootstrap.js- // patch: Integer _loader/bootstrap.js- // Patch version. If total version is "1.2.0beta1", will be 0 _loader/bootstrap.js- // flag: String _loader/bootstrap.js- // Descriptor flag. If total version is "1.2.0beta1", will be "beta1" _loader/bootstrap.js- // revision: Number _loader/bootstrap.js- // The SVN rev from which dojo was pulled _loader/bootstrap.js- major: 1, minor: 4, patch: 0, flag: "dev", _loader/bootstrap.js- revision: rev ? +rev[0] : NaN, _loader/bootstrap.js- toString: function(){ _loader/bootstrap.js- with(d.version){ _loader/bootstrap.js- return major + "." + minor + "." + patch + flag + " (" + revision + ")"; // String _loader/bootstrap.js- } _loader/bootstrap.js- } _loader/bootstrap.js- }

sedを使用すると、これは次のように1行ずつ実行されます。

  major=$(echo $lines | sed 's/.*major[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')
  minor=$(echo $lines | sed 's/.*minor[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')
  patch=$(echo $lines | sed 's/.*patch[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')
于 2012-06-21T18:47:38.287 に答える