shell - 从 Gradle 脚本运行 shell 命令

标签 shell gradle

我有最糟糕的时间试图弄清楚如何从 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一点点。

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

关于shell - 从 Gradle 脚本运行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46959783/

相关文章:

android - 在 Android gradle 构建中,在构建期间更改 strings.xml 的内容

java - Shell 脚本在失败时不记录 Java 退出状态

Ruby 执行 shell 命令并获取数组

linux - 使用 tr 命令在 bash shell 脚本中将字母转换为数字

gradle - 运行 Gradle 应用程序时如何摆脱执行/进度条?

android - 重复的jar入口-android

bash - 如何知道某个文件当前是否正在执行?

linux - mv命令末尾的星号有什么作用

gradle - IntelliJ 不会从 gradle 复合构建导入模块

gradle - 在单个Eclipse工作区中处理Gradle项目的多个相互依赖的组