如何在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
相关产品推荐
相关产品推荐

