You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将kubectl get secret的输出作为参数正确传入kubectl patch命令

错误原因

你之前的写法存在两处核心问题:

  • 命令替换的反引号位置错误,误将反引号写到了password键名中
  • bash默认不会解析单引号包裹内容里的命令替换逻辑,导致最终提交的是命令文本而非命令执行后得到的base64格式密码,因此触发了base64格式非法的报错

正确实现方案

方案一:直接使用命令替换

调整引号嵌套规则,用双引号包裹整个patch参数,对内部json的双引号做转义即可触发命令替换:

kubectl --context foo -n foo patch secret postgres.foo-db.credentials -p "{\"data\":{\"password\":\"$(kubectl --context foo -n foo get secret postgres.foo-db.credentials -o jsonpath={.data.password})\"}}"

方案二:先存为变量再传参(更易读、不易出错)

先将查询到的密码存入临时变量,再代入patch命令,避免复杂的引号转义:

# 第一步:查询密码存入变量
PASSWORD=$(kubectl --context foo -n foo get secret postgres.foo-db.credentials -o jsonpath={.data.password})
# 第二步:执行patch更新
kubectl --context foo -n foo patch secret postgres.foo-db.credentials -p '{"data":{"password":"'"$PASSWORD"'"}}'

这种写法的引号逻辑为:用单引号包裹大部分固定json内容,到需要插入变量的位置先闭合单引号,用双引号包裹变量保证变量解析,最后再补全剩余的单引号即可,既不会破坏json结构,也不会出现变量解析失败的问题。


内容的提问来源于stack exchange,提问作者David Huber FF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:09:05