【问题标题】:Gradle Exec task fails running sedGradle Exec 任务运行 sed 失败
【发布时间】:2015-11-13 13:51:40
【问题描述】:

我的构建脚本有以下任务

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 构建失败并显示此错误消息

sed: 1: " '/myInsertionPattern/r ...": 无效的命令代码

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务“:MyProject:editProjectArtificat”执行失败。

    进程 'command 'sed'' 以非零退出值 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"

}

现在 "arg" 行中的两个 "'" 都被删除了,我们不再遇到 gradle build 错误;但是,当 gradle 构建完成时,sed 不会按预期生成“MyChangedOutputFile”文件。

在 shell 上键入带有两个“'”的 sed 命令会产生预期的输出?当外壳上的“'”被删除时,sed 失败。我的理解 sed 需要围绕匹配模式和命令“'”。

【问题讨论】:

    标签: shell sed gradle


    【解决方案1】:

    我不知道 gradle,但似乎args 需要一个列表,每个参数都分开。但是,您正在使用重定向(),这必须由 shell 完成,因此您不应该执行 sed 而应该执行 bash。你想要像bash -c "sed -e '/.../r ...' &lt;... &gt;..." 这样的东西可能会起作用:

    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"
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2013-07-09
      • 1970-01-01
      相关资源
      最近更新 更多