Ruby RSpec执行Shell循环命令出现‘i was unexpected at this time’错误的解决
解决RSpec中运行Shell命令时"i was unexpected at this time"的错误
这个报错的核心原因很明确:你写的是Bash风格的Shell命令,但运行环境是Windows的命令提示符(CMD)——而CMD完全不支持Bash的花括号扩展({1..3})语法,也不认识Bash的后台运行符号&,所以才会抛出"i was unexpected at this time"的错误。
根据你的运行环境,有两种针对性的修改方案:
方案1:适配Windows CMD环境
把命令改成CMD原生支持的语法,同时用start /B实现后台运行效果:
describe 'Running Resilience test', test_execute: true do it "running deploy build access service and manage" do # CMD的数字循环语法:for /L %%i in (起始值,步长,结束值) # start /B 让命令在后台运行(不新开窗口) # timeout 5 >nul 替代Bash的sleep 5,>nul用来隐藏timeout的默认输出 system("start /B cmd /c \"for /L %%i in (1,1,3) do (timeout 5 >nul & echo %%i)\"") system("start /B cmd /c \"for /L %%i in (10,1,13) do (timeout 5 >nul & echo %%i)\"") end end
方案2:强制用Bash解析命令(适用于WSL、Linux或Windows下的Git Bash等环境)
如果你的运行环境本身支持Bash,但RSpec默认用了CMD执行命令,可以明确指定用Bash来解析你的脚本:
describe 'Running Resilience test', test_execute: true do it "running deploy build access service and manage" do # 用bash -c 包裹原命令,确保Bash语法被正确解析 system("bash -c 'for i in {1..3}; do sleep 5; echo $i; done &'") system("bash -c 'for i in {10..13}; do sleep 5; echo $i; done &'") end end
额外注意
如果是在Windows的Git Bash终端里运行测试,直接执行rake命令即可,不需要额外修改——因为Git Bash本身就是Bash环境,会自动识别你的原命令语法。
内容的提问来源于stack exchange,提问作者AutomateFr33k
相关产品推荐
相关产品推荐

