为什么gradle没有运行我的shell脚本?

时间:2015-05-15 03:20:43

标签: android bash shell groovy gradle

我几乎可以肯定我忽略了什么。

我有一个带有build.gradle文件的android gradle项目。在这里,我指定了任务:

task doSomething(type: Exec) {
    println("okay clearly you have got to be getting in here")
    commandLine 'sh /Users/dzt/Desktop/create_a_file_on_desktop.sh'
}

并且根本没有运行。 shell文件只是字面意思:

#!/bin/sh
echo "hi" > /Users/dzt/Desktop/i_am_a_byproduct.txt

我在它上面运行chmod u+x所以它是可执行的(我在普通的bash shell上仔细检查过)。

我也尝试使用groovy命令:

"cd ../ && sh /Users/dzt/Desktop/create_a_file_on_desktop.sh".execute()

也不起作用。我有点难过。我没有看到输出文件。但是,我确实在gradle控制台中看到了我的print语句。

这里发生了什么?

**编辑**

好吧,我把它钻了更多 - >

cd ../根本不起作用。为什么是这样?我需要使用相对路径,至少相对于此目录

3 个答案:

答案 0 :(得分:3)

电话必须是

commandLine 'sh', '/Users/dzt/Desktop/create_a_file_on_desktop.sh'

或者这被认为是一个命令。但是你想用脚本作为参数启动sh。另一方面,由于您已设置了execute-bit,因此您也可以直接调用shell脚本。

请参阅http://gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html

使用cd运行cd ../ && sh script也不会像这样工作,因为&&是一个shell脚本命令。如果要像这样运行,则必须运行shell并使其作为命令运行。 E.g。

commandLine 'sh', '-c', 'cd ~/scripts && sh myscript.sh'

答案 1 :(得分:1)

由于某种原因,Gradle不允许cd命令。一些命令只是不能使用groovy。

相反,我在shell脚本中使用了cd。这似乎工作得很好。

答案 2 :(得分:0)

首先,您必须输入根级gradle.build文件。你需要像这样写它,才能真正执行任务。

task doSomething << {
    group 'yourGroupName'
    description 'Runs your bash script'
    exec {
        workingDir "$projectDir/../pathto/"
        commandLine 'bash', '-c', './bashscript.sh'
    }
}

然后您可以执行:./gradlew -q doSomething。在这种情况下,我使用了bash,但您可以使用任何受支持的脚本shell,例如sh, perl, python等。