gpt4 book ai didi

shell - Gradle Exec任务无法运行sed

转载 作者:行者123 更新时间:2023-12-03 05:15:28 25 4
gpt4 key购买 nike

我的构建脚本具有以下任务

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 ...": invalid command code



失败:生成失败,发生异常。
  • 出了什么问题:
    任务':MyProject:editProjectArtificat'的执行失败。

    Process 'command 'sed'' finished with non-zero exit value 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构建错误。但是,在构建gradle时,sed不会按预期产生“MyChangedOutputFile”文件。

    在 shell 上同时输入sed命令和两个“'”会产生预期的输出吗?在 shell 上删除“'”后,sed失败。我的理解sed在匹配的模式和命令周围需要“'”。

    最佳答案

    我不知道gradle,但似乎args需要一个列表,每个参数都分开。但是,您正在使用重定向(<和>),并且必须由 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"
    }

    关于shell - Gradle Exec任务无法运行sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32109469/

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