【发布时间】:2019-01-21 17:42:39
【问题描述】:
我正在尝试将几个命令从 powershell\cmd 传递给 alpine 容器。问题是:命令有引号\单引号\转义引号。
示例命令,实际命令为一行,我将其拆分以便查看:
docker run neilpang/acme.sh bin/sh -c --%
"acme.sh --issue --dns dns_azure --dnssleep 10 --force -d "domain";
openssl pkcs12 -inkey /acme.sh/domain/domain.key -in /acme.sh/domain/domain.cer -export -out pfx -password pass:password;
curl -X POST -d "{\"certName\":\"certName1\",\"certData\":\"$(tail -n +2 /acme.sh/domain/domain.cer > b64; head -n -1 b64)\"}" url -H Content-Type:application/json;
curl -X POST -d "{\"certName\":\"certName2\",\"certData\":\"$(openssl base64 -in pfx -out b64; cat b64)\"}" url -H Content-Type:application/json"
我尝试过的:
- 在整个表达式周围使用单引号(在 --% 之后)会返回类似带引号的字符串未关闭
- 在 json 周围使用单引号可以正常工作,但
$()没有得到解释,所以我没有得到正确的输出 - 在 json 之前\之后转义
" - 在 json 之前\之后没有
",会导致一些垃圾 - 如果没有
--%,我就无法让它工作,但即使使用--%,ps 似乎也会进行一些字符串操作 - 用 cmd 做了一些实验,也没有运气。
我愿意接受任何方式来完成这项工作:)
对于那些请求错误,这里有一个示例:
-n: line 1: syntax error: unexpected end of file (expecting ")") # quotes around expression
-p: line 1: syntax error: unterminated quoted string # single quotes around expression
no error, but certData empty # no quotes around json
no quotes in json >> not valid json >> doesnt get parsed # escaped quotes around json
执行我试图在容器内传递的字符串会导致有效的“解决方案”,而试图通过docker run 传递它们会导致上述不同的缺陷。我不确定这些来自哪里,来自 powershell(尽管我坚信 --% 在这里完成了工作,并且 powershell 正确传递了所有内容)、docker 或 bash 本身。我最接近工作的是' 版本,但它不会评估$() 内的表达式,所以问题
【问题讨论】:
标签: bash powershell docker command-line cmd