使用 Gradle,如何确保命令存在

Cor*_*rey 6 groovy build.gradle

我正在使用 Gradle 进行 AOSP,我想检查我的构建环境中是否存在命令。

task printCommand{
    doLast{
        def command = "git --version"
        println command.execute().text
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码运行完美,它将打印命令“git --version”的输出。

但我根据检查 Bash 脚本中是否存在程序尝试另一个命令

task printCommand{
    doLast{
        def command = "command -v docker"
        println command.execute().text
    }
}
Run Code Online (Sandbox Code Playgroud)

它总是显示这样的错误消息。

任务“:printCommand”执行失败。java.io.IOException:无法运行程序“命令”:错误= 2,没有这样的文件或目录

为什么我不能以这种方式使用“命令-v docker”?

有没有更好的方法来检查 Gradle 中是否存在命令?

Fra*_*ung 2

command是一个内置的 bash 命令,而不是二进制文件。

groovyString.execute将启动一个进程。进程启动的二进制文件必须完全限定(例如)或者必须在您的(或)"/usr/bin/docker --version"上找到$PATH%PATH%

  • 为我工作。`任务 printCommand{ doLast{ exec{ def command = "command -v docker" 可执行文件 "bash" args "-l", "-c", command } } }` (2认同)