我是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
答案 0 :(得分:0)
如果将新的“ FiveOrgsChannel”配置文件部分保存到名为“ newProfile.txt”的文件中,则可以:
$ cat newProfile.txt >> configtx.yaml
此命令会将newProfile.txt的内容附加到configtx.yaml文件的末尾。对于此特定用例,这应该是可以接受的,因为“配置文件”部分是configtx.yaml中的最后一个部分
注意:您将需要确保newProfile.txt包含configtx.yaml文件的正确缩进。 (在上面列出的示例中,缩进似乎不正确-FiveOrgsChannel应该与TwoOrgsChannel处于相同的缩进级别。)