繁体   English   中英

bash 脚本中的 yq 命令

[英]yq command in bash script

我有一个命令:

yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml)

它工作正常,返回 false 或 true。

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

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 管道中调用这个脚本,并得到一个错误:

yq: error: argument files: can't open '[.info.version] | .[0] == .[1]': [Errno 2] No such file or directory: '[.info.version] | .[0] == .[1]'

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

考虑到基于您的其他问题的文件内容,您可以使用kislyuk/yq将基于mikefarah/yq的解决方案重写为

yq -n '[inputs.info.version] | .[0] == .[1]' api.yaml api_master.yaml

与之前一样,它根据提供的两个文件中的版本比较输出 boolean 值。 考虑任何第三个输入(尽管<(git show master:api.yaml)你提供了一个),但你已经拥有的 mikefarah/yq 解决方案也不是。

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

使用 mikefarah/yq:

yq ea '[.info.version] | unique | length < 2' api.yaml api_master.yaml <(git show master:api.yaml)

使用 kislyuk/yq:

yq -n '[inputs.info.version] | unique | length < 2' api.yaml api_master.yaml <(git show master:api.yaml)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM