2017-08-07 31 views
1

在命令行下面的curl命令执行工作。我从服务器获得有效的响应。卷曲的作品,但不会在bash脚本

curl -X POST https://somebaseurl/api/v1/auth/login -H "Content-Type:application/json" -d '{"email": "[email protected],com", "password": "foo"}' 

但是我想写这样

baseUrl=https://somebaseurl 
contentTypeJson="\"Content-Type:application/json\"" 
credentials="'{\"email\": \"[email protected]",\"password\": \"foo\"}'" 
login="curl -X POST $baseUrl/api/v1/auth/login -H $contentTypeJson -d $credentials" 
echo ${login} 

response=`${login}` 
echo ${response} 

我从服务器得到一个坏的请求响应bash脚本。但是,如果我将回显的curl命令直接复制到我的终端中,它就可以工作。我究竟做错了什么?

编辑:

作为请求的I得到 错误的请求有关的请求 'POST API/V1/AUTH /登录'[预期应用/ JSON]

+0

“我得到一个错误的请求响应”您得到的回应是什么?请编辑您的问题,包括错误 – sircapsalot

+0

@sircapsalot做,感谢在“登录” – MaxPower

+0

的'-v'选项添加到curl命令启用详细输出。也许你的预期命令不插 – sircapsalot

回答

1

BashcURL可以说是相当特别的报价是如何在脚本中使用。如果逃跑被抛弃,那么其他一切都很容易失败。通过shellcheck.net运行脚本通常对识别这些问题非常有帮助。下面是根据建议修复后的脚本的修订版本:

#!/bin/bash 

baseUrl="https://somebaseurl/api/v1/auth/login" 
contentTypeJson="Content-Type:application/json" 
credentials="{\"email\": \"[email protected]\", \"password\": \"foo\"}" 
login="$(curl -X POST "$baseUrl" -H "$contentTypeJson" -d "$credentials")" 
echo "${login}" 

response="${login}" 
echo "${response}" 
+0

谢谢,这得到了它! – MaxPower

2

与反引号执行解释命令只是作为一个序列字,并不特别对待报价。要让shell将交互式输入的引号解释为相同,请改用eval ${login}

顺便说一句,bash有一个-x选项,将显示,因为他们正在执行命令你(与bash -x script.sh而不是bash script.sh./script.sh运行脚本)。这将向您显示正确引用的命令,并且比使用echo打印出来更有帮助。