首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash脚本中的yq命令

bash脚本中的yq命令
EN

Stack Overflow用户
提问于 2022-03-31 14:19:43
回答 1查看 2.3K关注 0票数 0

我有个命令:

代码语言:javascript
运行
复制
yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml)

它工作正常,返回假或真。

我以这种方式在bash脚本中调用此命令:

代码语言:javascript
运行
复制
touch api_master.yaml
t=$(yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml))
echo $t

然后,我在CI管道中调用这个脚本,并得到一个错误:

代码语言:javascript
运行
复制
yq: error: argument files: can't open '[.info.version] | .[0] == .[1]': [Errno 2] No such file or directory: '[.info.version] | .[0] == .[1]'

如何在bash脚本中调用此命令,以便在CI管道中正确执行该命令

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-31 18:14:07

考虑到基于你的另一个问题的文件内容,您可以将这个mikefarah/yq-based解决方案重写为一个使用kislyuk/yq作为

代码语言:javascript
运行
复制
yq -n '[inputs.info.version] | .[0] == .[1]' api.yaml api_master.yaml

它像以前一样,根据所提供的两个文件中的版本进行比较,输出一个布尔值。它不考虑任何第三个输入(尽管使用可以提供一个输入),但是您已经拥有的mikefarah/yq解决方案也是如此。

因此,要检查来自的所有提供的输入版本是否确实相同,请使用unique并检查结果数组的length

使用mikefarah/yq:

代码语言:javascript
运行
复制
yq ea '[.info.version] | unique | length < 2' api.yaml api_master.yaml <(git show master:api.yaml)

使用kislyuk/yq:

代码语言:javascript
运行
复制
yq -n '[inputs.info.version] | unique | length < 2' api.yaml api_master.yaml <(git show master:api.yaml)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71694192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档