【发布时间】:2019-02-05 15:52:43
【问题描述】:
travis encryption docs 提到我必须在加密之前对密码进行 bash 转义:
转义某些符号的注意事项
当您使用 travis encrypt 加密敏感数据时,需要注意的是,它将作为 bash 语句处理。这意味着当 bash 解析它时,您正在加密的秘密不应导致错误。数据不完整会导致 bash 将错误语句转储到日志中,其中包含部分敏感数据。
因此,您需要转义特殊字符,例如大括号、圆括号、反斜杠和管道符号。例如,当你要将字符串
6&a(5!1Ab\赋值给FOO时,需要执行:
travis encrypt "FOO=6\\&a\\(5\\!1Ab\\\\"
bash 的答案似乎围绕printf "%q" 展开,但要弄清楚如何将printf 与travis cli 连接起来仍然太复杂了。
让travis encrypt 做它应该做的事情是什么?
我的意思是,我想粘贴我的变量名和它的值,并确保它会被正确加密,而不必担心 bash 转义。我们可以继续使用上面的示例,假设我想将字符串 6&a(5!1Ab\ 分配给变量 FOO。
当我们讨论这个问题时,travis env set 对应的单行代码是什么?这将有助于那些与data too large 错误作斗争的人。
【问题讨论】:
-
我认为您需要的只是
printf -v esc_foo '%q' "$foo",现在esc_foo包含正确转义的字符串 -
"Processed as a
bashstatement" 让我觉得它只是在参数上调用eval,这意味着我会考虑很长时间才能使用它根本. -
另外,为什么他们会建议反斜杠出没的噩梦而不是
travis encrypt "FOO='6&a(5!1Ab\'"? -
非常感谢@Inian。