curl有效,但赢得了';不能在BASH脚本中执行
下面的curl命令在命令行中工作。我从服务器获得了有效的响应curl有效,但赢得了';不能在BASH脚本中执行,bash,curl,Bash,Curl,下面的curl命令在命令行中工作。我从服务器获得了有效的响应 curl -X POST https://somebaseurl/api/v1/auth/login -H "Content-Type:application/json" -d '{"email": "foo@bar,com", "password": "foo"}' 然而,我正在尝试编写一个类似这样的BASH脚本 baseUrl=https://somebaseurl contentTypeJson="\"Content-Type
curl -X POST https://somebaseurl/api/v1/auth/login -H "Content-Type:application/json" -d '{"email": "foo@bar,com", "password": "foo"}'
然而,我正在尝试编写一个类似这样的BASH脚本
baseUrl=https://somebaseurl
contentTypeJson="\"Content-Type:application/json\""
credentials="'{\"email\": \"foo@bar.com",\"password\": \"foo\"}'"
login="curl -X POST $baseUrl/api/v1/auth/login -H $contentTypeJson -d $credentials"
echo ${login}
response=`${login}`
echo ${response}
我从服务器收到错误的请求响应。但是,如果我将回音curl命令直接复制到终端中,它就会工作。我做错了什么
编辑:
按要求我得到了
请求“POST-api/v1/auth/login”[Expected-application/json]的错误请求使用反勾号执行时,仅将命令解释为一个单词序列,并且不专门处理引号。要让shell像交互输入一样解释引号,请改用
eval${login}
另一方面,bash有一个
-x
选项,可以在命令执行时显示命令(使用bash-x script.sh
而不是bash script.sh
或/script.sh
运行脚本)。这将向您显示正确引用的命令,并且比使用echo打印命令更有帮助。Bash
和cURL
在脚本中使用引号的方式非常特殊。如果逃跑失败了,那么其他一切都很容易失败。通过shellcheck.net运行脚本通常有助于识别此类问题。以下是根据建议修复后的脚本修订版本:
#!/bin/bash
baseUrl="https://somebaseurl/api/v1/auth/login"
contentTypeJson="Content-Type:application/json"
credentials="{\"email\": \"foo@bar.com\", \"password\": \"foo\"}"
login="$(curl -X POST "$baseUrl" -H "$contentTypeJson" -d "$credentials")"
echo "${login}"
response="${login}"
echo "${response}"
“我收到一个糟糕的请求-响应”您得到的响应是什么?请编辑您的问题以包含以下内容:error@sircapsalot完成,谢谢在“login”中,向curl命令添加
-v
选项以启用详细输出。也许您的命令没有按预期进行插值。您不应该在双引号内加上直引号,然后尝试将其用作引用类似参数的方法。使用\“$credentials\”并删除分配语句中的单个引号。内容类型也是如此。(我猜不出该修复程序是否解决了问题,但它使代码变得混乱。)谢谢,我明白了!