我正在使用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一遍又一遍地键入相同的命令。
答案 0 :(得分:2)
$$
替换为$
,请尝试以下操作:
curl -u 'username:pa$$$$word' https://example.com
,请参见make specification中的宏部分。
答案 1 :(得分:0)
在双引号内,外壳程序需要反斜杠以避免美元膨胀。
Makefile需要加倍的美元才能产生1美元。
因此,要在Makefile中的双引号中使用美元,您必须同时进行两者:
rule:
shell-command ... "pa\$$\$$word" ...