【问题标题】:Echo a multi line environment variable to a text file using Windows Command Line使用 Windows 命令行将多行环境变量回显到文本文件
【发布时间】:2017-10-24 09:46:59
【问题描述】:

我有一个环境变量%SSH_PRIVATE_KEY%,并希望使用命令行将其打印到文件中,而不使用批处理文件。这是因为我需要在 Gitlab-Ci .yml 脚本中使用这个文件。

在 Linux 中,这很简单:

echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa 

这会产生:

-----BEGIN RSA PRIVATE KEY-----
DHHDpgIFFFFAQEA4s5JARKOiF/dfherreh/qeGLNaryra7rt927okJmonpJHyCbA5SRyjsST/oC
tJx+YJ0BaNbbHtpbjbMeWgqKPXNAIRng30TXCOLLKverteygerg/ererg/GVFfd5T1v/qY2rGCN
v9yHSw89upy8pA+HvAFFFFHDb2YUAgpyYMqCcZ3vGY0/NDBxQQwDKwrefqwef/wefweqe/wwALb 

等等。

但是在 Windows 中,如果我尝试:

echo "%SSH_PRIVATE_KEY%" >  C:\runner\builds\66092d15\0\myproject\.ssh\id_rsa

它生成这个输出:

"-----BEGIN RSA PRIVATE KEY-----

因为一旦到达%SSH_PRIVATE_KEY% 中的换行符,它就会转义回显命令。

如何使用 windows 命令行将完整的%SSH_PRIVATE_KEY% 打印到文件中?

【问题讨论】:

  • 如何为变量分配多行值?
  • @Magoo 设置为 gitlab 秘密变量,添加到管道环境中。这是解释here

标签: windows command-line escaping echo gitlab-ci


【解决方案1】:

要获取所有行,请使用echo !VARIABLENAME!

echo !SSH_PRIVATE_KEY! >  C:\runner\builds\66092d15\0\myproject\.ssh\id_rsa

【讨论】:

  • 这个答案其实是正确的。请参阅我的详细解释。
【解决方案2】:

实际上 Blue7 是对的,但由于他/她被否决了,所以对于没有读过这是 gitlab-ci realted 的人来说,这是一个长长的答案:

为了!必须启用 DelayedExpansion 才能工作,它似乎只适用于批处理文件。在 gitlab 中,这是默认情况下的情况。默认情况下 cmd 将首先扩展环境变量然后解释它。因此当你写echo "%SSH_PRIVATE_KEY%" cmd 时实际上看到了

echo "-----BEGIN RSA PRIVATE KEY-----
DHHDpgIFFFFAQEA4s5JARKOiF/dfherreh/qeGLNaryra7rt927okJmonpJHyCbA5SRyjsST/oC
...

是的,包括"!为避免这种情况,您需要启用后期扩展setlocal EnableDelayedExpansion。通过延迟扩展,环境变量在将它们传递给应用程序之前就被扩展了。因此也不需要使用"。搜索EnableDelayedExpansion 会为您提供大量额外信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2018-01-01
    • 2012-05-23
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2010-09-08
    相关资源
    最近更新 更多