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

使用oc在OpenShift中创建Secret时,分号后的值无法被识别

解决OpenShift中创建包含分号的Secret值的问题

这个问题的核心是Shell会把分号;解析为命令分隔符——你原来的命令里,;databaseName=somedatabasename会被Shell当成一个独立的命令去执行,而不是作为JDBC URL的一部分,所以Secret里的url值会被截断到分号之前。

这里有几种可靠的解决方法:

方法1:用单引号包裹完整值

单引号会让Shell完全忽略内部的所有特殊字符(包括分号、空格、变量引用等),是最稳妥的方式:

oc create secret generic mysecret \
--from-literal=jdbc.mmi.driverClassName=something \
--from-literal=jdbc.mmi.userid=something \
--from-literal=jdbc.mmi.password=something \
--from-literal=jdbc.mmi.url='something;databaseName=somedatabasename'

方法2:用双引号包裹值

如果你的值里包含单引号,可以改用双引号。双引号内的分号不会被Shell解析为命令分隔符,不过要注意如果值里有$、`这类字符,需要用反斜杠\转义:

oc create secret generic mysecret \
--from-literal=jdbc.mmi.driverClassName=something \
--from-literal=jdbc.mmi.userid=something \
--from-literal=jdbc.mmi.password=something \
--from-literal=jdbc.mmi.url="something;databaseName=somedatabasename"

方法3:转义分号

给分号前加上反斜杠\,告诉Shell这是一个普通字符,不是命令分隔符:

oc create secret generic mysecret \
--from-literal=jdbc.mmi.driverClassName=something \
--from-literal=jdbc.mmi.userid=something \
--from-literal=jdbc.mmi.password=something \
--from-literal=jdbc.mmi.url=something\;databaseName=somedatabasename

验证结果

创建完成后,你可以用以下命令验证Secret里的URL是否完整:

oc get secret mysecret -o jsonpath='{.data.jdbc\.mmi\.url}' | base64 -d

执行后应该输出完整的something;databaseName=somedatabasename。

内容的提问来源于stack exchange,提问作者Ishant Gaurav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:19