首页 > 解决方案 > Bash 和 curl 脚本问题

问题描述

我正在尝试在 bash 脚本中包含这个 curl 命令(到 Dropbox 审计 api):

curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXX' --header 'Content-Type: application/json' --data '{"time":{"start_time":"2018-07-16T18:07:56Z"}}'

我已经用 XXXXX 等替换了身份验证令牌。

在我的脚本中,时间戳实际上是一个名为 $LAST 的变量。

我像这样构建 curl 命令:

LAST=$(date +"%Y-%m-%dT%H:%m:%SZ")

DROPBOX1=$(echo 'curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header '\''Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXX'\'' --header '\''Content-Type: application/json'\'' --data '\''{"time":{"start_time":"')

DROPBOX2=$(echo '"}}'\''')

CURLSTRING=$DROPBOX1$LAST$DROPBOX2

echo $CURLSTRING
$CURLSTRING 

我以这种方式构建它,否则由于 curl POST 中的所有单引号和双引号,$LAST 会出现问题。

运行那个小脚本会给出以下输出:

curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXX' --header 'Content-Type: application/json' --data '{"time":{"start_time":"2018-07-16T18:07:56Z"}}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100   175    0   127  100    48    232     87 --:--:-- --:--:-- --:--:--   231
curl: (6) Could not resolve host: Bearer
curl: (6) Could not resolve host: XXXXXXXXXXXXXXXXXXXXXXXXX'
curl: (6) Could not resolve host: application

可以看出,脚本中的 echo 命令显示了看起来完全有效的 curl 命令 - 实际上,如果我将该输出剪切并传递到命令行,它就可以工作。但是,由于 bash 脚本本身中显示的其余输出,curl 命令没有被正确解释。

我一生都无法弄清楚为什么会这样。显然 echo 正确地保留了字符串,而 curl 命令以某种方式分解了 $CURLSTRING。我显然没有正确使用单引号和双引号的某种组合,但是在哪里中断还不清楚。

谢谢

标签: bashcurl

解决方案


推荐阅读