Ubuntu中读取证书文件到变量时出现命令错误,咨询将证书作为请求参数传入的解决方法
Ubuntu中读取证书文件到变量时出现命令错误,咨询将证书作为请求参数传入的解决方法
嗨,这个问题我太熟啦!你遇到的-----BEGIN: command not found错误,其实是因为证书文件里的特殊格式(比如换行、带空格的标识行)被shell误当成了命令来执行,咱们一步步来解决:
错误原因
你原来用CERTIFICATE=cat WKGLOBAL-Secure-CertificateAuthority.crt``这种写法时,shell会把cat输出的内容直接当成命令行的一部分处理——证书里的换行被当成命令分隔符,-----BEGIN CERTIFICATE-----里的空格会把-----BEGIN识别成一个要执行的命令,自然就报错啦。
正确的读取方法
要完整保留证书的换行和特殊字符,你需要用双引号包裹赋值语句,同时推荐用$(...)替代反引号(可读性更好,嵌套也更灵活):
CERTIFICATE="$(cat WKGLOBAL-Secure-CertificateAuthority.crt)"
这样shell就会把证书的完整内容作为字符串存入变量,不会乱解析里面的格式。
验证读取结果
如果要确认变量里的内容是否正确,记得用带双引号的echo:
echo "$CERTIFICATE"
要是不加双引号,换行会被替换成空格,证书格式就乱了。
额外小建议
如果你是要把证书作为请求参数传给接口(比如用curl),其实很多工具支持直接指定证书文件,不用读进变量,比如:
curl --cert WKGLOBAL-Secure-CertificateAuthority.crt https://your-target-api.com
如果是必须要把证书内容放在请求体里,那前面的变量赋值方法就完全适用啦。
备注:内容来源于stack exchange,提问作者NutsAndBolts
相关产品推荐
相关产品推荐

