簡體   English   中英

使用Windows命令行將多行環境變量回顯到文本文件

[英]Echo a multi line environment variable to a text file using Windows Command Line

我有一個環境變量%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%的換行符,它就會轉義echo命令。

如何使用Windows命令行將完整的%SSH_PRIVATE_KEY%打印到文件?

要獲取所有行,請使用echo !VARIABLENAME!

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

實際上,Blue7是正確的,但是由於他/她被否決了,所以對於那些沒有讀過gitlab-ci的人來說,答案很長:

為! 要工作,必須啟用DelayedExpansion,並且它似乎僅在批處理文件中工作。 在gitlab中,默認情況下就是這種情況。 默認情況下,cmd將首先擴展環境變量,然后對其進行解釋。 因此,當您編寫echo "%SSH_PRIVATE_KEY%" cmd實際上會看到

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

是的,包括" !為避免這種情況,您需要啟用后期擴展setlocal EnableDelayedExpansion 。通過延遲擴展,環境變量會在將其傳遞給應用程序之前進行擴展。因此,也無需使用" 搜索EnableDelayedExpansion將為您提供許多其他信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM