我有一个YAML文件(在我的例子中是docker-复合文件),如下所示:
networks:
foo:
some_opts: "covfefe"
bar:
some_opts: "such wow"
services:
apache:
image: 'apache:1.0.0'
restart: always
mysql:
image: 'mysql:1.0.0'
restart: always
php:
image: 'php'
restart: always我想提取服务名称,这要感谢yq (相当于jq ),但对于YAML来说,它有这样的输出:
"apache"
"mysql"
"php"现在我可以这样做:
$ cat docker-compose.yml | yq '.services' | yq 'keys[]'
"apache"
"mysql"
"php"即使成功了,双管yq在我看来也很奇怪。我想我做错了。
问题:是否有任何方法通过一个yq命令来实现它?
我从这个问题那里吸取了灵感,但没有成功。
$ cat docker-compose.yml | yq '.services.keys[]'
jq: error: Cannot iterate over null发布于 2019-03-21 12:48:41
keys是jq中的内置函数,当给定对象时,返回数组中的键。因此,它实际上不是yaml的一部分(不是属性),这意味着您不能执行services.keys。
要获得密钥,可以在使用Python yq时执行以下操作
我们将在第一部分中获取services的对象,然后将其传递给keys,后者将根据给定的对象返回一个键列表。
cat docker-compose.yml | yq '.services | keys'或者像这样(没有猫和烟斗):
yq '.services | keys' docker-compose.yml产出如下:
[
"apache",
"mysql",
"php"
]为了去掉括号:
yq '.services | keys[]' docker-compose.yml产出:
"apache"
"mysql"
"php"有关更多详细信息,您可以在jq中查看jq。请注意,yq是jq的包装器,因此jq文档将有助于yq的帮助。
在围棋yq上你可以做到
yq e '.services | keys'发布于 2019-07-23 09:48:03
因为您只想列出来自文件的服务,所以可以使用命令来实现这一点。
docker-compose config --services不直接回答这个问题,因为它没有使用yq,但可能会有所帮助;)
https://stackoverflow.com/questions/55280071
复制相似问题