JScriptShell 0.1

WSH只能直接执行脚本文件,不像rhino/jsshell/jshost(jslibs)等,都有交互模式。所以自己写了一个JScriptShell玩。

废话不说,[url=https://cuihua.org/]翠花[/url],上代码!

jscriptshell.js

/*******************************************************************
* ******* ******* ******* ***** ******* *
* JScript Shell ***** ******* ****** * ****** **** ***
* Version 0.1 *** ******* ***** ** ******* * *****
* 2009-02-06 ** **** *** ******* *******
* * ******* *** ***** * *******
* <johnhax@gmail.com> * ******* ** ***** *** **** ******
* ******* * ****** * ******* *****
********************************************************************
* Copyright 2009 HE Shi-Jun *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, *
* either express or implied. See the License for the specific *
* language governing permissions and limitations. *
*******************************************************************/

function help() {
commands = [
'help() Display usage and help messages',
"load(['foo.js' ...]) Load files named by string arugments",
'print([exp ...]) Evaluate and print expressions',
'quit() Quit the shell',
'gc() Runs the garbage collector'
]
return "\
Command Description\n\
======= ===========\n\
" + commands.join('\n')
}

function load() {
for (var i = 0, f; i < arguments.length; i++) {
f = arguments[i]
eval(readUrl(f))
}
}

function readUrl(url) {
if (isRelative(url)) url = WScript.ScriptFullName + '/../' + url
if (readUrl.req == null)
readUrl.req = WScript.CreateObject('Msxml2.XMLHTTP.3.0')
readUrl.req.open('GET', url, false)
readUrl.req.send(null)
return readUrl.req.responseText

function isRelative(url) {
return !/^[a-zA-Z]+:/.test(url)
}
}

function print() {
WScript.Echo(Array.prototype.join.call(arguments, ' '))
}

function quit() {
WScript.Quit()
}

function gc() {
CollectGarbage()
}

new function () {
var l = 0, newInput = true, input, output, lastLine
while (true) {
if (newInput) {
WScript.StdOut.Write('js> ')
input = WScript.StdIn.ReadLine()
if (input == '?') input = 'help()'
} else {
WScript.StdOut.Write(' > ')
input += '\n' + (lastLine = WScript.StdIn.ReadLine())
}
l++
try {
output = eval(input)
} catch(e) {
if (e instanceof SyntaxError && lastLine != ';;') {
newInput = false
continue
}
output = '<stdin>, line ' + l + ': ' + e.name + ': ' + e.message
}
WScript.Echo(output)
newInput = true
}
}


执行:
C:\jscriptshell>cscript jscriptshell.js

如果你的script host默认使用cscript(可通过 cscript /H:CScript 来设置),则可以直接:
C:\jscriptshell>jscriptshell


TODO:
1. 加入类似于rhino的命令行参数
2. load脚本的错误处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值