【问题标题】:Strange behavior when parsing result from curl + awk解析 curl + awk 的结果时出现奇怪的行为
【发布时间】:2019-01-07 11:02:59
【问题描述】:

在 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 var 中的 cr(不确定如何解释上述前缀/后缀的整个反转)。

已解决:根据 Romeo 的输入,我现在可以添加 |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')

【问题讨论】:

  • 你需要-F in grep吗?
  • 我尝试将 -F 和 -i 都删除到 grep,结果相同,请参阅更新后的帖子。
  • 尝试将二进制数据转储到 VERSION 变量 echo $VERSION|od -ax 中,以检查其中是否存在奇怪的符号。
  • --header 参数周围的转义双引号不能正确。

标签: bash jenkins awk


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多