我的构建脚本具有以下任务
task editProjectArtificat (type:Exec) {
executable "sed"
args "-e '/myInsertionMatchingPattern/r " + projectDir.toString() + "/scripts/install/myTextFileToInsert' < " + projectDir.toString() + "/build/scripts/MyOriginalInputFile > " + projectDir.toString() + "/build/scripts/MyChangedOutputFile"
}
使用此错误消息执行上述任务时,gradle build失败
sed:1:&#34; &#39; / myInsertionPattern / r ...&#34;:无效的命令代码
失败:构建因异常而失败。
处理&#39;命令&#39;&#39;&#39;完成非零退出值1
但是,当我更改gradle.build脚本以使任务看起来像这样
时task editProjectArtificat (type:Exec) {
executable "sed"
args "-e /myInsertionMatchingPattern/r " + projectDir.toString() + "/scripts/install/myTextFileToInsert < " + projectDir.toString() + "/build/scripts/MyOriginalInputFile > " + projectDir.toString() + "/build/scripts/MyChangedOutputFile"
}
现在,这两个&#34;&#39;&#34;删除了&#34; arg&#34;一行,我们不再得到gradle构建错误;但是,sed不会产生&#34; MyChangedOutputFile&#34; gradle构建完成后按预期文件。
使用&#34;&#39;&#34;键入sed命令在shell上产生预期的输出?当&#34;&#39;&#34;&#34;&#34;&#34;&#34;&#34;在shell上删除。我理解sed需要&#34;&#39;&#34;围绕匹配的模式和命令。
答案 0 :(得分:1)
我不知道gradle,但似乎args
需要一个列表,每个参数都是分开的。但是,您正在使用重定向(&lt;和&gt;)并且必须由shell完成,因此您不应该执行sed而是执行bash。你想要像bash -c "sed -e '/.../r ...' <... >..."
这样的东西,所以这样的东西可能会起作用:
task editProjectArtificat (type:Exec) {
executable "bash"
args "-c", "sed -e '/myInsertionMatchingPattern/r " + projectDir.toString() + "/scripts/install/myTextFileToInsert' < " + projectDir.toString() + "/build/scripts/MyOriginalInputFile > " + projectDir.toString() + "/build/scripts/MyChangedOutputFile"
}