0

我是 shell 脚本的新手,并试图探索同样的东西。要求如下。我需要编写一个脚本文件,从前端动态获取 channelProfile 名称,对于这个 channelProfile,我必须在 configtx.yaml 文件的 Profiles 部分下附加现有的 TwoOrgsChannel。我有 configtx.yaml 文件,其中配置文件部分定义为:

            Profiles:
            TwoOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities

注意:*ChannelDefaults、*ApplicationDefaults、*ApplicationCapabilities 定义在同一个文件(configtx.yaml)中。

输出应如下所示:

            Profiles:
            TwoOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities
        FiveOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities
            

这是我试图实现但无法生成预期输出的代码。

            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
4

1 回答 1

0

如果您将新的“FiveOrgsChannel”配置文件部分保存到名为“newProfile.txt”的文件中,您可以:

$ cat newProfile.txt >> configtx.yaml

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

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

于 2020-10-28T13:47:07.020 回答