我有个命令:
yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml)
它工作正常,返回假或真。
我以这种方式在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管道中正确执行该命令
发布于 2022-03-31 18:14:07
考虑到基于你的另一个问题的文件内容,您可以将这个mikefarah/yq-based解决方案重写为一个使用kislyuk/yq作为
yq -n '[inputs.info.version] | .[0] == .[1]' api.yaml api_master.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)
https://stackoverflow.com/questions/71694192
复制相似问题