Xshell 录制的操作脚本script 执行起来总是卡住 原因是颜色控制符
如果你需要不断地重复执行shell脚本,比如,搭建测试环境之类的。强烈建议你使用Xshell的操作脚本功能。
录制操作脚本
修改操作脚本
录制的脚本确实是对整个操作流程的记录。从理论上说重新执行一遍应该能重现整个操作流程。但是实际执行起来会卡住。
我排除了中英文的原因,编码格式的原因,最终发现原因是脚本输出了带颜色的字符。在Xshell把流程记录成操作脚本时,是略过了颜色控制字符的;而在Xshell执行操作脚本时,WaitForString函数去取终端输出的字符时是取到了颜色控制字符的。
例如,终端输出的是
实际上是
xsh.Screen.WaitForString("按 Enter 回车键 继续....或按 Ctrl + C 取消.")
而在执行脚本时,就与终端上的输出不匹配了。
从软件设计的角度来看,我认为是Xshell的一个bug,我认为未来应该会有一个略过颜色控制符的比如叫做 WaitForPlainString 的函数。
所以我不准备在操作脚本里添加颜色控制符,而是会在操作脚本里删减WaitForString判断的关键字。
过程类似如下视频:执行操作脚本
=======================
如果你是用的这个一键Vless+Websocket+TLS单模式脚本
https://github.com/crazypeace/V2ray_VLESS_WebSocket_TLS_CaddyV2
你可以把下面这段脚本保存成 .vbs 后缀文件,试着在Xshell里执行一下 :)
'请保存为 .vbs 后缀'你的域名请解析到你的IP,并关闭CDN,再执行脚本Sub Mainxsh.Screen.Synchronous = truexsh.Screen.Send("apt update" + "\n")xsh.Screen.WaitForString("root@")xsh.Screen.Send("apt install -y curl" + "\n")xsh.Screen.WaitForString("root@")xsh.Screen.Send("bash <(curl -L https://github.com/crazypeace/V2ray_VLESS_WebSocket_TLS_CaddyV2/raw/main/install.sh)" + "\n")xsh.Screen.WaitForString("Enter 回车键")xsh.Screen.Send("\n")xsh.Screen.WaitForString("(默认ID:")xsh.Screen.Send("你的UUID" + "\n") '适合不想修改自己的节点参数的做法'如果你想让脚本自动生成新的ID,就改成这样 xsh.Screen.Send("\n")xsh.Screen.WaitForString("(默认端口port:")xsh.Screen.Send("\n")xsh.Screen.WaitForString("(例如: mydomain.com): ")xsh.Screen.Send("你的域名" + "\n") '这里要替换成真正的域名xsh.Screen.WaitForString("for IPv6: ")xsh.Screen.Send("\n")xsh.Screen.WaitForString("(默认path:")xsh.Screen.Send("\n")xsh.Screen.WaitForString("(默认site:")xsh.Screen.Send("\n")xsh.Screen.WaitForString("Enter 回车键") ' 如果你是woiden等NAT小鸡, 已经有了共享的IPv4出站. 不用安装WARP, 请把这行及下面一行删除或注释xsh.Screen.Send("\n")End Sub
评论
发表评论