curl PUT 使用 auth token header 到 mesosphere 在没有 eval 的情况下失败

curl PUT using auth token header to mesosphere fails without eval

EDIT:

我已经设法让它与

一起工作
response=$(
  curl -k -X PUT -d "$marathon_payload" --write-out %{http_code} --silent --output "$tmp"\
       -H "Authorization: token=$dcos_token" -H "$header_content_type"  $app_id_url
)

单引号导致了问题。转了几圈,但一切都很好。

道德:如果价值被正确引用,价值中的引号并不重要,除非你评估整个事情,我应该知道这一点。奥卡姆又赢了。

end edit

我正在使用 curl 启动 Mesosphere 微服务部署,但如果不使用 eval 就不会成功。自从我最近继承了这段代码以来,我一直试图将 eval 从中删除,这只是一种习惯,但它阻碍了我。

脚本使用

启动部署
response=$(
 eval curl -k -X PUT -d "'$marathon_payload'" --write-out %{http_code} --silent --output $tmp\
       -H "'Authorization: token=$dcos_token'" -H "'$header_content_type'" $app_id_url
)

如果收到 200 或 201,它会循环 curl 以有效 screen-scrape 部署页面,直到请求消失。

chkDeploy() { rm -f $tmp;
  eval curl -k -X GET --silent --write-out %{http_code} --silent --output $tmp\
            -H "'Authorization: token=$dcos_token'" -H "'$header_content_type'" $deployments_url
}
response=$( chkDeploy )

$dcos_token 是 base64 编码的字符串。

然后它使用另一个 curl 循环检查服务到信息页面,以便它可以验证版本号。 这个在没有评估的情况下工作正常。

chkCode() {
  curl -k -X GET --write-out %{http_code} --silent --output $tmp $info_url;
}
response=$( chkCode )

前两个return401,认证失败。 我猜身份验证令牌引用已关闭。

这里没有理由使用eval;您只需要正确引用 -H 的参数即可。

response=$(
  curl -k -X PUT -d "$marathon_payload" \
     --write-out %{http_code} \
     --silent --output "$tmp" \
     -H "Authorization: token=$dcos_token" \
     -H "$header_content_type" "$app_id_url"
)