Shell脚本中的命令curl格式错误

时间:2018-06-28 14:34:44

标签: shell curl ssh

为什么在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会话中尝试它时可以工作?

请问一些主意吗?

2 个答案:

答案 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脚本访问该变量。