【问题标题】:Command curl malformed in shell scriptshell 脚本中的命令 curl 格式错误
【发布时间】:2018-06-28 14:34:44
【问题描述】:

为什么当我在 ssh 会话中使用 curl 时它运行良好,但是当我在 shell 脚本中使用它时它返回错误。

在 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 会话时它可以工作?

有什么想法吗?

【问题讨论】:

  • 是不是因为你用name_host而不是host_name
  • 您可以在脚本中使用set -x 查看实际执行的命令,包括参数扩展。
  • @BenjaminW。不,我编辑了我的问题
  • 您需要在minimal reproducible example 中显示完整的脚本。
  • 如何使用 set -x ?

标签: shell curl ssh


【解决方案1】:
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”解释为它应该获取的 URL 之一。您收到错误是因为它无法将“GET”一词解释为有效的 URL。

“-u”用于指定请求的用户名和密码。如果您确实需要指定单词“GET”作为用户名,那么您的第二个示例应该像第一个示例一样具有“-u GET”。

另一方面,如果单词“GET”应该是要发出的 HTTP 请求的类型,那么您应该使用“-X GET”。或者直接忽略它,因为 curl 默认会执行 GET 请求。

【讨论】:

    【解决方案2】:

    可能是因为您在 shell 脚本中使用 name_host 作为变量而不是 host_name。

    还要确保您可以通过 shell 脚本访问该变量。

    【讨论】:

    • 投机(因此更多的是澄清请求而不是权威回应),这应该作为评论发布。
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2014-04-28
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多