Gox脚本的各种执行方式-GX2

Gox语言作为轻巧的脚本语言,编写的代码执行方式有多种选择,相较于其他语言可以说是非常丰富的。并且Gox语言完全绿色,只需要下载一个主程序文件,即可运行包括GUI图形界面在内的各种脚本代码。官网在这里,另外还可以访问Gox的Github页面Gitee页面获取最新版本。

注意,Ubuntu系统运行Gox语言时需要事先安装GTK3的环境,执行下述命令即可安装:

apt install libgtk-3-dev

那么,我们就来看看Gox语言的各种花式执行方式吧。

  • 正常执行

在终端窗口(例如Windows下为命令提示符,即CMD)中执行类似下面的命令,即可运行名为script1.gox的Gox语言脚本文件。

gox script1.gox

注意:Gox语言的代码必须以UTF-8格式编码。

 

  • 拖拽执行

对于一些不熟悉命令行操作的人,可以直接将后缀(扩展名)为.gox的文件用鼠标拖拽至下载后的gox可执行文件上即可执行。

 

  • 双击直接执行

同样地,不喜欢命令行方式的,可以在操作系统中设置文件关联,将.gox后缀(扩展名)的文件直接用gox程序打开执行,这样只需鼠标双击或者选中后按回车键(MacOS是按Command+O键)就可以执行Gox脚本文件了。

 

  • 直接执行GUI图形界面程序(不显示终端窗口)

如果脚本不需要命令行窗口,可以直接用goxw代替gox来执行脚本,这样不会出现终端窗口(Windows上黑色的CMD窗口),还可以设置.goxw后缀的文件默认用goxw程序打开,这样将只有GUI界面的脚本改为.goxw后缀后,就可以直接双击执行该文件了。

 

  • 自动执行默认脚本(可用于分发应用脚本)

Gox主程序启动时,会检查其所在的文件夹/目录下是否有名为auto.gox的文件,如果有则会自动执行该脚本。这是为了让开发者发布脚本方便,只需将gox主程序和名为auto.gox的脚本文件打包在一起分发就可以了,这样别人直接双击gox执行文件就会自动执行该脚本。如果不希望发布的脚本改名为auto.gox,可以在auto.gox文件中用run、runCode或runScript函数运行该脚本,这样两个脚本和一个gox主程序一起分发就可以了。

注意:如果使用了Sciter库来做GUI界面,最好连同sciter.dll一起发布(Linux和Mac上设置稍复杂,请参考Sciter官网介绍)。

另外,Gox还支持自动执行的批处理脚本,请参看后面批处理的说明。

 

  • 启动图形化代码编辑器,并可以在编辑器中修改和运行代码

 

gox -edit script1.gox

 

  • 直接启动图形代码编辑器,编辑新的Gox脚本并可以执行

gox -edit

 

  • 以系统默认的打开方式打开Gox脚本,一般用于编辑Gox代码文件,此时需要现在系统里关联好.gox文件的默认打开方式

gox -open code1.gox

 

  • 在REPL环境(直接执行gox程序不带参数将进入交互式编程环境REPL)中,直接运行run()函数,可以弹出文件选择框选择执行某个脚本文件

 

  • 在Gox代码中执行另一段脚本代码,使用runScript函数

runScript函数第二个参数是运行脚本的模式mode,具体的进一步使用方法,请参考Gox语言的文档

 

  • 在Gox代码中,直接使用run函数,直接运行一个指定的Gox脚本文件。

 

这两种方法可以也用于加载自己编写的Gox语言库文件。

 

  • 直接运行网络上的某个脚本

gox -remote https://example.com/script1.gox

 

  • 从剪贴板执行某个脚本

gox -clip

可以直接从系统剪贴板获取文本内容,作为脚本直接运行,命令行参数仍然可以有

 

  • 根据配置文件运行某个脚本

gox -cloud script1.gox

根据gox配置目录下(配置目录的查找原则是:先查找C:\gox或/gox下,无法存取则改为gox执行程序的目录)的cloud.cfg文件中的内容作为前缀来执行远程脚本

gox -local script1.gox

根据gox配置目录下的localScriptPath.cfg文件中的内容作为前缀来执行本地目录脚本

gox -ssh=file script1.gox

根据gox配置目录下的ssh.cfg文件中的内容作为前缀来执行远程服务器上的某目录下的脚本,其中的内容可以是类似host:port:username:password:remotedir/ 这样

 

  • 直接执行

对于开发人员,可以直接使用下述方式执行代码:

gox -example basic.gox

可以直接运行Gitee上gox库中的例子代码。

gox -gopath basic.gox

可以运行本地GOPATH下gox库中的例子代码。

上述两种情况时,后缀.gox可以省略。

 

  • 魔法代码/数字(MN)

另一种更方便的方式是魔法代码(Magic Code/Number,简称MN),即根据一个数字来执行代码。例如,执行下面的代码(确保可以访问网络):

gox 18

将执行一段例子代码,结果如下:

C:\Users\Administrator>gox 18
Calculator by TopXeQ V0.9a
Please enter the expression: 7*98-(1-0.71)
result: 685.71

C:\Users\Administrator>

我们可以用-view参数来查看魔法数字为18的代码:

C:\Users\Administrator>gox 18 -view
pln("Calculator by TopXeQ V0.9a")

paraT = trim(getParameter(os.Args, 2, ""))

if paraT != "" {
        expression = paraT
} else {
        expression = getInputf("Please enter the expression: ")
}

result = eval(expression)

println("result:", result)

pass()

C:\Users\Administrator>

当然,也可以用重定向将代码保存下来修改:

C:\Users\Administrator>gox 18 -view > test.gox

C:\Users\Administrator>

这样,MN为18的代码就被保存下来到test.gox文件中,可以据此再进行修改。

具体不同魔法代码,请联系软件发布者获取,主要的例子MN代码可以在源代码的magic目录中查看。

 

  • 从命令行执行脚本

也可以直接在命令行中执行脚本代码,使用-run参数即可,例如:

D:\tmpx>gox -run pln(1.2+3)
4.2

有时候代码中含有双引号等特殊字符或需要执行多行代码时,可以使用-urlDecode参数并将代码按URL编码(escape)的方式输入即可,例如:

D:\tmpx>gox -run -urlDecode a=md5(%22abd%22)%0Apln(a,1.2%2B3)
4911e516e5aa21d327512e0c8b197616 4.2

相当于执行了下面的代码:

a=md5("abd")
pln(a,1.2+3)

另一种从命令行执行脚本的方式是:直接使用-cmd参数

gox -cmd="pln(\"1+2\" + \"ab c\")"

相当于执行了 pln("1+2" + "ab c")这行代码。注意,-cmd=后的代码可以用双引号括起来,防止其中出现空格的问题,如果代码中含有双引号,如果是单行代码,可以用转义符来讲双引号转义。

如上所示,执行单行的代码时,可以直接在命令行中用转义符“\”,也可以加-urlDecode参数来执行多行代码:

gox -urlDecode -cmd="pln(%221%2B2%22%20%2B%20%22ab%20c%22)%0Apln(9*9)"

相当于执行了下面两行代码。

pln("1+2" + "ab c")
pln(9*9)

*gox主程序执行时如果带 -run 参数,将直接执行后面的代码,如果是多行或有特殊字符的情况,可以将其urlEncode一下,可以在gox执行后用urlEncode或urlEncodeX函数来进行,例如:

D:\tmpx# gox
> urlEncodeX(`systemCmd("Rundll32.exe", "user32.dll,LockWorkStation")`) 
systemCmd%28%22Rundll32.exe%22%2C+%22user32.dll%2CLockWorkStation%22%29
> 

 

  • 批处理

Gox也支持批处理,即一行一行处理多个Gox代码文件,一般将这种文件命名为后缀为“.gxb”的文件中,每行写一条命令行即可,即一般执行Gox代码的命令行把第一个Gox主程序这个去掉即可。即,如果原来命令行为:

gox -verbose test.gox

那么,写入Gox批处理文件中应为:

-verbose test.gox

下面一个批处理文件例子,文件名为auto.gxb,其中内容是:

// gxb
basic.gox
18
basic.gox -verbose

注意,其中可以写注释行,也是以“//”开头,注释行将被忽略。这样,basic.gox文件将被执行两次,中间还将执行一次魔法数字为18的代码,第二次执行basic.gox时,将带上开关参数-verbose。在批处理中的Gox代码最好用全局变量argsG来处理命令行参数而不是os.Args,argsG将保存正在执行的批处理的这一行。

Gox中,将有三种形式让Gox将代码作为批处理文件来处理:

  • 后缀为.gxb的文件,将自动被作为批处理文件处理
  • 文件中第一行如果以“// gxb”开头,该文件将被按批处理文件处理,无论文件名后缀是什么
  • Gox执行时,命令行中如果带有-batch参数,也将忽略文件名后缀按批处理进行

与auto.gox文件类似,如果执行Gox主程序时没有带参数,当前目录下如果存在auto.gxb文件时,将自动按批处理文件执行auto.gxb。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容