Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/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
Bash OpenStack的curl和脚本问题_Bash_Sh_Openstack - Fatal编程技术网

Bash OpenStack的curl和脚本问题

Bash OpenStack的curl和脚本问题,bash,sh,openstack,Bash,Sh,Openstack,我目前正在做一个shell脚本,在Openstack上创建一些网络/虚拟机。在这里,我首先获取令牌,然后尝试列出所有图像。然而,环境变量似乎存在某种问题 echo "GETTING TOKEN" res=$( curl -sD - -o /dev/null \ -H "Content-Type: application/json" \ -d ' ... }' \ http://$1/identity/v3/auth/tokens) token=$(echo "$res" | awk '/X-S

我目前正在做一个shell脚本,在Openstack上创建一些网络/虚拟机。在这里,我首先获取令牌,然后尝试列出所有图像。然而,环境变量似乎存在某种问题

echo "GETTING TOKEN"
res=$( curl -sD - -o /dev/null \
-H "Content-Type: application/json" \
-d '
...
}' \
http://$1/identity/v3/auth/tokens)

token=$(echo "$res" | awk '/X-Subject-Token: /{print $NF}')

export OS_TOKEN="$token"

echo $OS_TOKEN

echo  "X-Auth-Token: $OS_TOKEN"

curl -s \
--header "X-Auth-Token: $OS_TOKEN" \
 http://$1/image/v2/images
这是我得到的输出:

devstack@MFZhani:~$ ./script.sh localhost
GETTING TOKEN
THE TOKEN
X-Auth-Token: THE SAME TOKEN
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.27 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
devstack@MFZhani:~$./script.sh localhost
领取代币
代币
X-Auth-Token:相同的令牌
400错误请求
错误的请求
您的浏览器发送了此服务器无法理解的请求。


Apache/2.4.27(Ubuntu)服务器127.0.0.1端口80

问题是,当我硬编码令牌时,它就工作了。另外,我知道这不是由变量中的坏字符引起的,因为我正在使用完全相同的令牌执行其他命令来创建网络,并且它工作得很好(这里的区别是我在执行GET而不是POST)。

使用Kamil Cuk建议的
set-x
找到它。有一个\r是我无法看到的。删除了它,它工作了。谢谢。

像这样尝试
set-x
:curl-s set-x \--标题“x-Auth-Token:$OS_Token”\http://$1/image/v2/images??将
set-x
添加到脚本开头的第一行。跑观察输出。以
+
开头的行是正在执行的命令。在google上搜索如何调试bash脚本。