Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
curl有效,但赢得了';不能在BASH脚本中执行_Bash_Curl - Fatal编程技术网

curl有效,但赢得了';不能在BASH脚本中执行

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命令在命令行中工作。我从服务器获得了有效的响应

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\”并删除分配语句中的单个引号。内容类型也是如此。(我猜不出该修复程序是否解决了问题,但它使代码变得混乱。)谢谢,我明白了!