在Ubuntu上使用curl,我试图获取受以下方面启发的Jenkins版本:
https://wiki.jenkins.io/display/JENKINS/Remote+access+API
在bash脚本中,我这样做:
VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -Fi X-Jenkins: | awk '{print $2}')
echo "__A__[${VERSION}]__B__"
但是当我运行脚本时,我得到了:
]__B__2.89.2
因此出于某种原因,前缀__A__[
被吞下,并且后缀变成了前缀。
我还尝试使用以下方法修剪输出:
VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -Fi X-Jenkins: | awk '{print $2}' | sed -e 's/^[ \t]*//')
但是它给出相同的结果。
如下所示,我也尝试过:
echo '__A__['"${VERSION}"']__B__'
但仍然给出相同/错误的结果。
我尝试过的其他一些事情(给出了相同的结果)
输出相同/错误
VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -i X-Jenkins: | awk '{print $2}')
echo '__A__['"${VERSION}"']__B__'
输出相同/错误
VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep X-Jenkins: | awk '{print $2}')
echo '__A__['"${VERSION}"']__B__'
基于以下建议,我现在尝试:
echo $VERSION|od -ax
哪个给:
0000000 2 . 8 9 . 2 cr nl
2e32 3938 322e 0a0d
0000010
如果我将其与:
VERSION_TEMP="2.89.2"
echo $VERSION_TEMP|od -ax
我得到:
0000000 2 . 8 9 . 2 nl
2e32 3938 322e 000a
0000007
因此,看起来是VERSION变量中的cr引起了问题(不确定如何如上所述解释前缀/后缀的整个反转)。
已解决:根据罗密欧的输入,我现在可以使用它添加|tr -d '\r'
了:
VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep X-Jenkins: | awk '{print $2}'|tr -d '\r')
答案 0 :(得分:1)
显然,输出包含DOS回车。
尝试添加tr -d '\015'
:
version=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" "$URL" |
tr -d '\015' |
awk 'tolower($0) !~ /x-jenkins:/{print $2}')
echo "__A__[$version]__B__"
大写变量名保留供系统使用,因此我也将小写变量名更改为小写,并删除了useless grep
.