コネタ+小物シェル
2007-05-10


WSH オブジェクト

dara-j自身は最近まで知らなかったが、JScriptにて次の評価が true を返す。

WSH === WScript
ようするに、WScript.Argumentsだのと記述するときにちょっとだけタイプ量を減らせるっちゅーことですな。

ついでにシェル環境

っていうのかな。コンソールでスクリプト入力して即評価するっつーよくあるやつです。

いずれもっと高機能なやつを考えてるけど、これはこれでコンパクトなので公開。

ソースはこれだけ。

if( /wscript\.exe/i.test( WSH.FullName ) ) {
        new ActiveXObject( "WScript.Shell" ).Run( "cmd /k cscript //nologo \"" + WSH.ScriptFullName + "\"" );
        WSH.Quit();
}

// ↓これ、いらないじゃん(07.5.10 23:46)
//function print() {
//      var a = [];
//      for( var i = 0; i < args.length; i++ ) a.push( arguments[ i ] );
//      WSH.Echo( a );
//}

with( {
        $_A : function( args ) {
                var a = [];
                for( var i = 0; i < args.length; i++ ) a.push( args[ i ] );
                return a;
        },
        _p : "js>",
        _print : function() {
                var a = arguments;
                for( var i = 0; i < a.length; i++ ) WSH.StdOut.Write( a[ i ] );
        },
        _in : "",
        print : function() {
                WSH.Echo( this.$_A( arguments ).join( "" ) );
        },
        read : function(m) {
                if( m ) this._print( m );
                return WSH.StdIn.ReadLine();
        }
} ) {
        while( ( _in = read( _p ) ) != "exit" ) {
                try {
                        print( eval( _in ) );
                } catch( e ) {
                        print( e.description );
                }
        }
}
特に機能はなくて、せいぜいが ぐらいです。 ごにょごにょとwithブロックで囲ってるのは、式評価時に参照されるグローバル変数を作りたくなかったから。これなら実行時にどんな(いいすぎ。組み込みの名前は保護できないし)名前の変数を宣言してもこのスクリプト自身の環境を壊さないので。

追記:ああ、print()関数は保護されないや、よく見たら。

さらに追記:うあ、グローバルな定義のprint()関数、いらないじゃん。てことでコメントアウト。

[JavaScript]
[WSH]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット