如何使用shell脚本将新配置文件附加到configtx.yaml文件?

如何使用shell脚本将新配置文件附加到configtx.yaml文件?,yaml,hyperledger-fabric,yq,Yaml,Hyperledger Fabric,Yq,我不熟悉shell脚本,并尝试探索相同的方法。要求如下。我需要编写一个脚本文件,从前端动态获取channelProfile名称,对于这个channelProfile,我必须在configtx.yaml文件的Profiles部分下附加现有的TwoOrgsChannel。我有configtx.yaml文件,其中profiles部分定义为: Profiles: TwoOrgsChannel: Consortium

我不熟悉shell脚本,并尝试探索相同的方法。要求如下。我需要编写一个脚本文件,从前端动态获取channelProfile名称,对于这个channelProfile,我必须在configtx.yaml文件的Profiles部分下附加现有的TwoOrgsChannel。我有configtx.yaml文件,其中profiles部分定义为:

            Profiles:
            TwoOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities
当我运行这个文件时,我得到了这个错误

            div@DESKTOP-0BSERCC:/mnt/c/Users/Div/Downloads/fabric-samples_3/first-network$ ./scriptFile.sh configtx.yaml FiveOrgsChannel
            jq: error: FiveOrgsChannel/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: error: Profiles/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: 2 compile errors
div@DESKTOP-0BSERCC:/mnt/c/Users/Div/Downloads/fabric-samples\u 3/first network$。/scriptFile.sh configtx.yaml FiveOrgsChannel
jq:错误:未在第1行定义五个组织名称/0:
.Profiles+=FiveOrgsChannel,Profiles.TwoOrgsChannel
jq:错误:未在第1行定义配置文件/0:
.Profiles+=FiveOrgsChannel,Profiles.TwoOrgsChannel
jq:2个编译错误
如果将新的“FiveOrgsChannel”配置文件部分保存到名为“newProfile.txt”的文件中,您可以:

$cat newProfile.txt>>configtx.yaml

此命令将newProfile.txt的内容附加到configtx.yaml文件的末尾。对于这个特定用例,这应该是可以接受的,因为概要文件部分是configtx.yaml中的最后一部分


注意:您需要确保newProfile.txt包含configtx.yaml文件的正确缩进。(在上面列出的示例中,缩进似乎不正确-FiveOrgsChannel应该与TwoOrgsChannel处于相同的缩进级别。)

您可以发布
yq--version
的输出吗?您不必转换为JSON并使用
jq
修改值,然后作为YAML写回。使用mikefaraq/yq,您可以直接修改YAML。请查找版本-yq版本3.3.2您的问题不清楚,上一次编辑甚至使问题变得更糟。因为你是新的网站,你需要了解什么是一个好问题。1.需要一个你正在处理的精确输入2。准确的输出预期3。所有可变值(例如$1、$2)4。工具版本(如您更新的
yq
)。看到和
            export CONFIGTXFILE=$1
            export CHANNELPROFILE=$2
             
            yq r --prettyPrint -j $ CONFIGTXFILE > peer.json 
            jq --arg e "${CONFIGTXFILE}" ".Profiles += ${CHANNELPROFILE} Profiles.TwoOrgsChannel " peer.json > mypeer.json
            
            yq r --prettyPrint mypeer.json > configtx.yaml
            
            div@DESKTOP-0BSERCC:/mnt/c/Users/Div/Downloads/fabric-samples_3/first-network$ ./scriptFile.sh configtx.yaml FiveOrgsChannel
            jq: error: FiveOrgsChannel/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: error: Profiles/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: 2 compile errors