yq 3.4.1无法持久写入YAML文件,仅写入部分内容求助
解决yq 3.4.1无法完整写入YAML文件的问题
问题情况
使用yq 3.4.1向YAML文件写入数据时,执行以下命令后控制台输出符合预期,但目标文件仅保留第一段内容,无法生成完整的双段YAML。
执行的命令:
yq n affinity-controller.fresh_install "False" > history.yaml yq w -d'*' history.yaml snapshot-validation-webhook.fresh_install "False"
当前history.yaml内容:
affinity-controller: fresh_install: False
预期的history.yaml内容:
affinity-controller: fresh_install: False snapshot-validation-webhook: fresh_install: False
问题原因
yq v3.x的w(write)命令默认将修改后的结果输出到标准输出(控制台),不会直接覆盖原文件。你执行的第二个命令只是在控制台展示了完整内容,但没有将结果写入到history.yaml中。
解决方案
方案1:使用重定向覆盖原文件
将第二个命令的输出重定向到目标文件,直接覆盖原有内容:
yq w -d'*' history.yaml snapshot-validation-webhook.fresh_install "False" > history.yaml
注意:部分shell环境下,重定向会先清空目标文件再写入,可能导致意外数据丢失。更稳妥的方式是通过临时文件中转:
yq w -d'*' history.yaml snapshot-validation-webhook.fresh_install "False" > temp.yaml && mv temp.yaml history.yaml
方案2:使用-i参数原地修改文件
yq v3.x支持-i(in-place)选项,直接在原文件上修改内容,无需手动重定向:
yq w -i -d'*' history.yaml snapshot-validation-webhook.fresh_install "False"
验证
执行上述任一方案后,查看history.yaml即可得到预期的完整双段YAML内容。
内容的提问来源于stack exchange,提问作者K Akshay
相关产品推荐
相关产品推荐

