bash 脚本中的 yq 命令
yq command in bash script
我有一个命令:
yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml)
它工作正常,returns 错误或正确。
我在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 管道中正确执行
文件内容基于 in mind, you could rewrite this mikefarah/yq-based solution to one using kislyuk/yq为
yq -n '[inputs.info.version] | .[0] == .[1]' api.yaml api_master.yaml
与之前一样,它根据提供的两个文件中的版本比较输出一个布尔值。它 不 考虑任何第三个输入(尽管 <(git show master:api.yaml)
你提供了一个),但你已经拥有的 mikefarah/yq 解决方案也不是。
因此,要检查 all 提供的输入的版本是否确实相同,请使用 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)
我有一个命令:
yq eval-all "[.info.version] | .[0] == .[1]" api.yaml api_master.yaml <(git show master:api.yaml)
它工作正常,returns 错误或正确。
我在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 管道中正确执行
文件内容基于
yq -n '[inputs.info.version] | .[0] == .[1]' api.yaml api_master.yaml
与之前一样,它根据提供的两个文件中的版本比较输出一个布尔值。它 不 考虑任何第三个输入(尽管 <(git show master:api.yaml)
你提供了一个),但你已经拥有的 mikefarah/yq 解决方案也不是。
因此,要检查 all 提供的输入的版本是否确实相同,请使用 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)