【发布时间】:2020-08-13 03:29:22
【问题描述】:
我正在尝试编辑 YAML 文件以通过 bash 脚本替换几个特定值。
例如,在以下文件中,我想将“command”的值从
sh -c 'fabric-ca-server init -b admin:adminpw'
给sh -c 'fabric-ca-server start -b admin:adminpw'
之前(原始文件):
fabric-ca-server:
image: hyperledger/fabric-ca:amd64-1.4.7
container_name: fabric-ca-server
ports:
- "7054:7054"
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
volumes:
- "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
command: sh -c 'fabric-ca-server init -b admin:adminpw'
之后(期望的结果):
fabric-ca-server:
image: hyperledger/fabric-ca:amd64-1.4.7
container_name: fabric-ca-server
ports:
- "7054:7054"
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
volumes:
- "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
command: sh -c 'fabric-ca-server start -b admin:adminpw'
最初,我是这样使用 sed 的:
sed -i "10s/command:.*/command: sh -c 'fabric-ca-server start -b $UNVAR:$PWVAR'/" ./docker-compose.yaml 可行,但相当笨拙,因为它需要实际的行号(可以更改)。
我发现了yq,它看起来更优雅,但我无法让它在这里工作,因为它将-c 解释为一个标志。 (我尝试使用 '--' 来纠正这个问题,但不知道如何让它工作。)
yq w -i ./docker-compose.yaml fabric-ca-server.command sh -c 'fabric-ca-server start -b $TLSCA_UN:$TLSCA_PW'
关于如何使用 yq 正确执行此操作的任何建议?
【问题讨论】:
-
我假设您使用的是github.com/mikefarah/yq。能发一下版本详情吗?
yq --version? -
@Inian 是的 - 我今天早些时候从 github 下载了它。我有 yq 版本 3.3.2