从Gradle脚本运行Shell命令

惠勒

我花了最多的时间来尝试如何从Gradle中运行shell命令,因为看来Gradle很难做到这一点。

这是命令:

git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D

这只是清理已合并的本地分支的便捷命令。

这是我创建的任务:

task gitCleanLocalBranches {
    doLast {
        exec {
            workingDir '.'
            commandLine 'git branch --merged | grep -v \\* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D'

        }
    }
}

任务失败,并显示:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':gitCleanLocalBranches'.
> A problem occurred starting process 'command 'git branch -a''

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':gitCleanLocalBranches'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
        ...
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D''
        at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:222)
        ... 3 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D'
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
        ... 4 more
Caused by: java.io.IOException: Cannot run program "git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D" (in directory "/home/wlaw/sterlib"): error=2, No such file or directory
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
        ... 6 more
Caused by: java.io.IOException: error=2, No such file or directory
        ... 7 more

因此,我认为该命令过于复杂,因此尝试了一些更简单的方法,然后更改commandLine为:

commandLine 'git branch -a'

但是我得到了完全一样的错误。为什么Gradle无法在PATH环境变量中找到任何内容

亚诺斯

要执行的命令及其参数必须是要传递给的单独参数commandLine,如下所示:

commandLine 'git', 'branch', '-a'

如果要像第一个示例一样执行复杂的管道,则可以将其包装在Shell脚本中。

我无法对此进行测试,但是我认为这也应该起作用:

commandLine 'sh', '-c', 'git branch --merged | grep -v -e \* -e master -e develop -e dmz | xargs git branch -D'

注意:我自由了一些,并简化grep了一点。

最后,您还可以在其中创建一个Git别名.gitconfig来包装复杂的管道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章