2016-09-26 107 views
3

我知道如何做到这一点有一些问题,但是我仍然无法让我的方案在将变量包裹在双引号中时工作。在bash脚本中使用环境变量Jenkins

我正在执行一个curl请求,以便在Jenkins中获得一个有效的面包屑,这样我就可以通过POST请求执行一项工作。

所以此刻我得到这样Password Invalid作为变量${USER_TOKEN}响应无法识别

echo "The USER TOKEN is " ${USER_TOKEN} # This outputs 123456789 for example 
CRUMB=$(curl -s 'http://jenkins:${USER_TOKEN}@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, ":",//crumb)') 

如果我硬编码USER_TOKEN那么这将工作,但我显然是想避免这种情况。

如何执行此curl命令并传入USER_TOKEN

更新

如果我环绕${USER_TOKEN}加上双引号我仍然得到同样的错误。

CRUMB=$(curl -s 'http://jenkins:"${USER_TOKEN}"@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, ":",//crumb)') 

如果我环绕curl要求用双引号,我得到

Invalid Xpath expression, contact(//crumbRequestField,:,//crumb) 
Unexpected ':' 
+0

为什么你不能双引号? 'curl -s'http:// jenkins:'“$ {USER_TOKEN}”'@ localhost'? – 123

回答

2

你需要双引号包含双引号的字符串。这是一个办法:

CRUMB=$(curl -s "http://jenkins:${USER_TOKEN}@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, "'":"'",//crumb)") 
+0

谢谢,就是这样 – Richlewis

0

尝试这种方式

CRUMB=$(curl -s "http://jenkins:"${USER_TOKEN}"@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, \":\",//crumb)") 

如果你想在你的字符串不是整个字符串扩展的变量必须用双引号包围。单引号可以防止任何bash评估。你也必须逃避整个字符串中的任何双引号。