muumoo.jp


ニュース記事検索


過去ログ 2008年06月21日 - ニュース過去ログ

ニュース過去ログ

2008/06/21 管理人日記 JavaScriptのシェル改良版

以前作ったJavaScriptのシェルを、ほんのちょっとだけ改良した。

以下、新しいjssh.jsです。

(function(){
    if(/wscript\.exe$/i.test(WScript.FullName)){
        (new ActiveXObject('WScript.Shell')).run('cscript "' + WScript.ScriptFullName + '"');
        return;
    }
    
    var echo = function(s){ WScript.echo(s); };
    var alert = function(s){ echo(s); };
    var dump = function(o){ for(var k in o) echo(k + ' = ' + o[k]); }
    
    var stdin = WScript.stdin;
    var stdout = WScript.stdout;
    var stderr = WScript.stderr;
    while(true){
        WScript.stdout.Write('js>');
        var src = stdin.readline();
        
        if(src == 'exit') break;
        if(src == ';'){
            src = (function(){
                var lines = [];
                while(true){
                    var line = stdin.readline();
                    if(line == ';') return lines.join('\n');
                    lines.push(line);
                }
            })();
        }
        
        try{
            var ret = eval(src);
            if(ret) echo(ret);
        }catch(e){
            WScript.stderr.WriteLine(e.message);
        }
    }
    stderr.Close();
    stdout.Close();
    stdin.Close();
})();

変更点は、wscript.exeで実行されたとき、自動的にcscript.exeで実行しなおす、というもの。それだけです。

従来のコードでは、コマンドプロンプトを自分で起動して「cscript jssh.js」と入力して起動させる必要がありました。単にjsファイルをダブルクリックしただけだと、通常はwscriptで実行されてしまい、標準入出力が使えないのでエラーになってしまいます。

今回の修正により、普通にダブルクリックしただけでも自動的にcscriptで起動するようになりました。これでいちいちバッチファイルを作ったりする必要もなくなり、より手軽に使えるようになったと思います。

最近気付いたけど、何か実際に作ったりするときはFirebugとかの方が便利なんですが、JavaScriptの本を読みながらちょっと試してみたい時とかはこういうjssh.jsみたいなのを使うと簡単。ただMicrosoftのエンジンを使うところが難点となることもあるので、そういうときはRhinoとかで同じようなシェルを作ることはできるのかな。っていうかRhinoには付いてくるんだっけ?Mozilla系のエンジンでは無理?

この記事のURI:
http://muumoo.jp/news/2008/06/21/0jssh.html


Copyright© 2002-2007 muumoo.jp All Rights Reserved.