使用Windows命令行

时间:2017-10-24 09:46:59

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

我有一个环境变量%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%打印到文件?

2 个答案:

答案 0 :(得分:0)

要使所有行都使用echo !VARIABLENAME!

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

答案 1 :(得分:0)

实际上,Blue7是对的,但是当他/她被否决时,对于那些没有读过gitlab-ci实现的人来说,答案很长:

为!要工作,必须启用DelayedExpansion,并且它似乎仅在批处理文件中工作。在gitlab中,默认情况下就是这种情况。默认情况下,cmd将首先扩展环境变量,然后对其进行解释。因此,当您编写echo "%SSH_PRIVATE_KEY%" cmd时实际上会看到

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

是的,包括"!为避免这种情况,您需要启用后期扩展setlocal EnableDelayedExpansion。对于延迟的扩展,环境变量将在传递给应用程序之前进行扩展。因此,也无需使用"。搜索EnableDelayedExpansion将为您提供许多其他信息。