2014-08-29 140 views
21

我有一个gradle构建设置,在其开始处我想在准备环境的子目录中执行shellscript。在Gradle中执行shell脚本

task build << { 
} 
task preBuild << { 
    println 'do prebuild stuff:' 
} 
task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    commandLine './myScript.sh' 
} 

build.dependsOn preBuild 
preBuild.dependsOn myPrebuildTask 

然而,当我通过调用gradle myPrebuildTask或者简单地建立项目执行任务时,会出现以下错误:

> A problem occurred starting process 'command './myScript.sh'' 

不幸的是,这就是我得到的。
我也试过以下 - 同样的错误。

commandLine 'sh mySubDir/myScript.sh' 

我在Windows上使用Gradle 1.10(Android需要),在Cygwin shell中。有任何想法吗?

回答

18

使用

commandLine 'sh', './myScript.sh' 

脚本本身不是程序本身,这就是为什么你必须声明“上海”的程序,并作为参数的路径,你的脚本。

+0

不同的命令下执行Linux和Windows(Cygwin)是必需的。我最终提供了脚本名作为参数:commandLine'sh','myScript.sh' – 2014-09-02 05:48:27

+0

请记住将任务放入项目gradle文件而不是模块gradle文件。 – 2017-04-13 06:51:03

-5

我复制了我的壳素文字来/usr/local/bin+x许可,并把它作为只是一个命令:

commandLine 'my_script.sh' 
+0

此选项适用于,但我不推荐将许多文件放在/ usr/local/bin – 2017-01-28 14:26:24

11

写Exec任务为Windows/Linux成为更通用的方法,但是便携,如果您正在调用在PATH命令文件:

task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) { 
     commandLine 'cmd', '/c', 'mycommand' 
    } else { 
     commandLine 'sh', '-c', 'mycommand' 
    } 
} 

这并不直接解决了OP的使用情况(因为是在工作目录的脚本文件),但问题的标题是更通用的(并提请我在这里),所以它可以帮助一些一个也许。

3

不幸的选项命令行不以任何方式工作,我和我的朋友寻找其他方式与可执行

executable "./myScript.sh" 

和全任务是

task startScript() { 
    doLast { 
    exec { 
      executable "./myScript.sh" 
     } 
    } 
}