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

如何在Karate Feature文件中调用Shell脚本?执行报错求助

问题分析

你遇到的错误核心原因是:cd 是 Bash 的内置命令,并非独立的可执行程序,karate.fork() 无法直接将其作为命令调用。第一个尝试的命令把 cd 当作主程序传入,导致系统找不到对应的可执行文件,从而抛出 CreateProcess error=2。

解决方案

针对你的需求,提供两种可行的实现方式:

方式一:通过 Bash -c 参数执行命令串

将 cd 切换目录和执行脚本的逻辑合并为一个 Bash 命令,通过 -c 参数传递给 Bash 执行:

karate.fork({ args: ['bash', '-c', 'cd D:/Users/shr/Desktop/18april/project/src/test/java/data/testdata && bash loadOptions.sh'] })
  • 使用 && 确保目录切换成功后再执行脚本,避免切换失败时仍执行脚本。
  • 整个命令串作为单个参数传递给 bash -c,由 Bash 解析执行。

方式二:指定工作目录执行脚本

利用 karate.fork() 的 workingDir 参数直接设置脚本执行的工作目录,无需手动执行 cd:

karate.fork({ 
  args: ['bash', 'loadOptions.sh'], 
  workingDir: 'D:/Users/shr/Desktop/18april/project/src/test/java/data/testdata' 
})

如果脚本在 classpath 中,可先通过 karate.resource() 获取其绝对路径再执行:

def scriptAbsolutePath = karate.resource('testdata/loadOptions.sh')
karate.fork({ args: ['bash', scriptAbsolutePath] })

内容的提问来源于stack exchange,提问作者Shreyansh Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:07