为什么在ssh会话中使用curl时,效果很好,但是在shell脚本中使用curl时,它会返回错误。
在ssh会话中:
[root@XXXX scripts]# export host_name="http://XXXX:number_port"
[root@XXXX scripts]# echo "curl -u GET ${host_name}/application/listteam"
curl -u GET http://XXXX:number_port/application/listteam
但是当我在shell脚本中使用它时:
list_team=$(curl GET "${host_name}/application/listteam")
echo "$list_team"
它重新运行:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: GET; Name or service not known
curl: (3) <url> malformed
我看到无法解析主机,但是为什么当我在ssh会话中尝试它时可以工作?
请问一些主意吗?
答案 0 :(得分:3)
curl -u GET ${host_name}/application/listteam" # interactive
list_team=$(curl GET "${host_name}/application/listteam") # non-interactive
在第一个示例中,您具有“ -u GET”。 “ -u”参数需要一个参数,curl
会将单词“ GET”解释为该参数。然后继续将下一个命令行参数解释为要获取的URL。
在第二个示例中,您只有“ GET”,而没有任何“ -u”。 curl
会将“ GET”一词解释为应获取的网址之一。您收到错误消息,因为它无法将“ GET”一词解释为有效的网址。
“-u”用于指定请求的用户名和密码。如果确实需要将单词“ GET”指定为用户名,则第二个示例应该像第一个示例一样具有“ -u GET”。
另一方面,如果应该将单词“ GET”作为发出的HTTP请求的类型,则应使用“ -X GET”。或者只是将其省略,因为curl默认情况下会执行GET请求。
答案 1 :(得分:0)
也许是因为您在shell脚本中使用name_host作为变量而不是host_name。
还要确保您可以通过shell脚本访问该变量。