【问题标题】:How to set a multi-line environment variable on Windows?如何在 Windows 上设置多行环境变量?
【发布时间】:2022-10-15 18:30:04
【问题描述】:

我正在尝试在 Windows 上设置私有 SSH 密钥环境变量。问题是私有 SSH 密钥位于以下形式的多行文本文件中:

-----BEGIN RSA PRIVATE KEY-----
Line1
Line2
Line3
...
-----END RSA PRIVATE KEY-----

我尝试使用以下脚本将文本文件的内容存储在变量中,以便以后可以使用它来设置环境变量:

setlocal EnableDelayedExpansion

set "var="
set LF=^


rem *** Two empty lines are required for the linefeed
FOR /F "delims=" %%a in (private_key.txt) do (
  set "var=!var!!LF!%%a"
)
echo !var!

setx SSH_PRIVATE_KEY !var!

然而,这给了我以下错误:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).

还有另一种方法可以定义这样的环境变量吗?

【问题讨论】:

    标签: windows batch-file environment-variables


    【解决方案1】:

    不幸的是,您遗漏了您收到的错误的一个非常重要的部分,即本示例中的第二行:

    ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
    Type "SETX /?" for usage.
    

    如果您输入setx /?,您会找到答案,但是它特别隐藏在这一行中:

        SETX /S system /U user /P password  BUILD /K
             "HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NT
             CurrentVersionCurrentBuildNumber" /M
    

    请注意,上述行的path 包含空格,这里的关键是路径是双引号的。您的变量还包含空格并需要双引号:

    setx SSH_PRIVATE_KEY "!var!"
    

    【讨论】:

    • 谢谢你的详细回答。这可行,但是有一个警告:“警告:正在保存的数据被截断为 1024 个字符。”当我检查变量时,我发现它确实被截断了(不包括整个 SSH 密钥)。有没有办法绕过这个限制?
    • 是和不是。您只能在注册表中真正调整它,但读取变量的工具/软件仍然存在限制。不过,我不会摆弄那个。您可以将密钥拆分为 2,并使用这两个变量来创建一个。但我会坚持使用包含密钥的文件。如果您能准确解释您打算如何使用该变量,也许我可以提出更好的解决方案。
    • 我实际上是在尝试从 docker-compose.yml 文件构建 Docker 映像。在给定点,dockerfile 需要克隆一个 git repo,我需要 SSH 密钥来进行身份验证
    • 但是然后只是从文件中传输密钥呢?
    • 你的意思是相当于 Windows 上的 SSH_KEY = "$(cat ~/file.txt)" 吗?我该如何在 Windows 上执行此操作?
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2016-07-28
    相关资源
    最近更新 更多