Gradle スクリプトからシェルコマンドを実行する 質問する

Gradle スクリプトからシェルコマンドを実行する 質問する

Gradle からシェル コマンドを実行する方法を理解するのに非常に苦労しています。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?

ベストアンサー1

実行するコマンドとその引数はcommandLine、次のように に渡す別々のパラメータである必要があります。

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

最初の例のように複雑なパイプラインを実行する場合は、それをシェル スクリプトでラップすることができます。

これをテストすることはできませんが、これも同様に機能するはずです:

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

grep注:少し簡略化して記載しました。

.gitconfig最後に、複雑なパイプラインをラップするために Git エイリアスを作成することもできます。

おすすめ記事