执行shell脚本并将其输出用作下一个gradle任务的输入

执行shell脚本并将其输出用作下一个gradle任务的输入,gradle,build,gradle-ssh-plugin,javaexec-gradle-plugin,Gradle,Build,Gradle Ssh Plugin,Javaexec Gradle Plugin,我使用gradle进行构建和发布,所以我的gradle脚本执行一个shell脚本。shell脚本输出一个ip地址,该地址必须作为输入提供给我的下一个gradle ssh任务。我能够在控制台上获取输出并打印,但无法将此输出用作下一个任务的输入 remotes { web01 { def ip = exec { commandLine './returnid.sh' } println ip --> i am able to see the ip addr

我使用gradle进行构建和发布,所以我的gradle脚本执行一个shell脚本。shell脚本输出一个ip地址,该地址必须作为输入提供给我的下一个gradle ssh任务。我能够在控制台上获取输出并打印,但无法将此输出用作下一个任务的输入

remotes {
  web01 {
    def ip = exec {
    commandLine './returnid.sh'
    }
    println ip  --> i am able to see the ip address on console
    role 'webServers'
    host = ip  --> i tried referring as $ip '$ip' , both results into syntax error
    user = 'ubuntu'
    password = 'ubuntu'
  }
}

task checkWebServers1 << {

  ssh.run {
    session(remotes.web01) {
    execute 'mkdir -p /home/ubuntu/abc3'
}
}
}
有人能帮我用正确的语法使用输出变量吗?或者提供一些可以帮助我的提示


提前感谢

它不起作用的原因是,
exec
调用返回是
ExecResult
(这里是它),并且它不是执行的文本输出

如果需要获取文本输出,则必须指定
exec
任务的
standardOutput
属性。可以这样做:

remotes {
    web01 {
        def ip = new ByteArrayOutputStream()
        exec {
            commandLine './returnid.sh'
            standardOutput = ip
        }
        println ip
        role 'webServers'
        host = ip.toString().split("\n")[2].trim()
        user = 'ubuntu'
        password = 'ubuntu'
    }
}
请注意,默认情况下,ip值将具有多行输出,包括命令本身,因此必须对其进行解析以获得正确的输出,对于我的Win机器,这可以通过以下方式完成:

ip.toString().split("\n")[2].trim()

这里只需要输出的第一行。

非常感谢@Stanislav。我通过使用def values=ip.toString().split(“\n”)和分配的host=value[0]使其工作。
ip.toString().split("\n")[2].trim()