cURL:如何在Makefile中转义2美元符号?

时间:2019-04-21 13:34:15

标签: curl makefile escaping

我正在使用cURL从使用基本身份验证的网站获取页面。假设带有凭据的命令行如下所示(请注意“ pa $$ word”中的两个美元符号):

curl -u "username:pa$$word" https://example.com

将此命令放在Makefile中时,得到HTTP/1.1 401 Unauthorised

问题显然是两个美元符号与Makefile结合使用,因为:

curl -u "username" https://example.com

有效(假设我在提示符下键入“ pa $$ word”)。

这在Bash中有效(不在Makefile中):

   curl -u 'username:pa$$word' https://example.com

我尝试了各种技巧来逃避这些美元符号。到目前为止,我已经尝试过(没有成功):

   curl -u "username:pa\$\$word" https://example.com
   curl -u "username:pa$$$$word" https://example.com
   curl -u "username:{pa$$word}" https://example.com
   curl ---netrc https://example.com # Credentials are in .netrc

对于那些担心我的反对者,我将密码以纯文本格式添加到Makefile中-该密码用于公共测试服务器,该公司已在公共网页上公开了参与测试所需的所有凭据。

我基本上是尝试使用Makefile编写测试过程的脚本,而不是使用ssh一遍又一遍地键入相同的命令。

2 个答案:

答案 0 :(得分:2)

将制作文件中的

$$替换为$,请尝试以下操作:

curl -u 'username:pa$$$$word' https://example.com

,请参见make specification中的部分。

答案 1 :(得分:0)

在双引号内,外壳程序需要反斜杠以避免美元膨胀。

Makefile需要加倍的美元才能产生1美元。

因此,要在Makefile中的双引号中使用美元,您必须同时进行两者

rule:
        shell-command ... "pa\$$\$$word" ...