You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:10:53