としてフラグを立てているので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/')