gpt4 book ai didi

gradle - 如何通过Gradle任务运行带有任意数量参数的程序

转载 作者:行者123 更新时间:2023-12-03 03:21:26 24 4
gpt4 key购买 nike

Gradle(我使用的是最新版本2.12)提供了以下类型:Exec父任务,但是我无法找到如何将其与多个参数一起使用。

例如我需要删除Postgresql数据库

dropdb --if-exists mydbname

但这不起作用
task dropDatabase(type: Exec) {
commandLine 'dropdb', '--if-exists', 'mydbname'
}

这也
task dropDatabase(type: Exec) {
commandLine 'dropdb'
args '--if-exists', 'mydbname'
}

我尝试了许多组合,但都失败了,并出现以下错误:输出未设置或参数错误。

但是我需要像这样运行:
gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres

怎么做?

最佳答案

任务

task dropDatabase(type: Exec) {
commandLine 'dropdb', '--if-exists', 'mydbname'
}

是正确的。我对其进行了测试,并且效果很好。据我了解,您的问题来自此命令
gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres

更准确地说是从管道 |中获取。

实际上,您不能在 commandLine属性中使用管道。解决方案是在bash解释器中运行命令。为此,请使用 -c命令的 bash选项:
task myTask(type: Exec) {
commandLine "bash" "-c" "gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres"
}

使用此解决方案,管道由bash解释器而不是gradle处理。

关于gradle - 如何通过Gradle任务运行带有任意数量参数的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com