Macos Gradle exec命令行未按预期工作

Macos Gradle exec命令行未按预期工作,macos,gradle,command-line,Macos,Gradle,Command Line,我目前正在OSX的一个Gradle项目中工作 我在.gradle文件中的函数如下所示 ext.MyFunction = { def fastlaneCommand = [ 'fastlane', '-version' ] def stdout = new ByteArrayOutputStream() exec { ignoreExitValue true sta

我目前正在OSX的一个Gradle项目中工作 我在.gradle文件中的函数如下所示

ext.MyFunction = {

     def fastlaneCommand = [
             'fastlane',
             '-version'
     ]

     def stdout = new ByteArrayOutputStream()

     exec {
         ignoreExitValue true
         standardOutput stdout
         workingDir PathsModel.instance.GetDeployerRoot()
         commandLine fastlaneCommand
         LOG.WARN("YOUR CLI COMMAND: " + commandLine)
     }
     println "Output:\n$stdout"
}
然后在“build.gradle”中

task jenkins_deploy() {
    doFirst {
        MyFunction()
    }
}
当需要执行命令行时 这将产生:

W A R N I N G:  YOUR CLI COMMAND: [fastlane, -version]

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jenkins_deploy'.
> A problem occurred starting process 'command 'fastlane''
我知道fastlane在我的路径中是“$HOME/.fastlane/bin”,这是可执行文件所在的位置。如果我只是打开终端并键入

“快车道-版本”

从任何目录中,fastlane工具都可以启动并执行它们应该执行的操作

我想我的问题是: 我打开终端并手动输入命令与我要求Gradle使用“exec”做完全相同的事情之间可能有什么区别? 我是否误解了“exec”和“commandLine”的实际功能

有关“fastlane”的一些信息是,它使用的是Ruby,我对Ruby知之甚少。这可能证明是相关的

编辑:我尝试将fastlaneCommand数组中的第二个元素“version”作为“version”和“-version”

编辑2(实际解决方案):尽管下面标记的答案是一个明确的解决方法,但解决方案有充分的理由说明为什么会发生这种情况以及为什么会发生这种情况。

TL;博士

我想应该是:

['sh', 'fastlane', '-version']
说明


我的手臂下没有链接,但如果省略
sh
,它将作为位于当前目录(或配置为第二个参数的目录)中的脚本执行。如果使用
sh
作为前缀,则将使用shell和$PATH变量执行它。

TL;博士

我想应该是:

['sh', 'fastlane', '-version']
说明


我的手臂下没有链接,但如果省略
sh
,它将作为位于当前目录(或配置为第二个参数的目录)中的脚本执行。如果您在它前面加上
sh
前缀,它将使用shell和$PATH变量执行。

我想它应该是:
['sh','fastlane','-version']
@Opal-Excellent,因为这有助于我完成这部分执行:)但是,我不必在终端中包含'sh'。你知道为什么会这样吗?如果你想回答这个问题,我可以把它标记为正确的。(除非有更详细的说明)我的手臂下没有链接,但如果省略
sh
,它将作为位于当前目录中的脚本执行(或配置为第二个参数)。如果您在它前面加上
sh
前缀,它将使用shell和$PATH变量执行。我想它应该是:
['sh','fastlane','version']
@Opal-Excellent,因为这帮助我完成了这部分执行:)但是,我不必在终端中包含'sh'。你知道为什么会这样吗?如果你想回答这个问题,我可以把它标记为正确的。(除非有更详细的说明)我的手臂下没有链接,但如果省略
sh
,它将作为位于当前目录中的脚本执行(或配置为第二个参数)。如果使用
sh
作为前缀,将使用shell和$PATH变量执行。