【问题标题】:Curl command works in terminal but not in Shell script run in terminal [duplicate]curl命令在终端中有效,但在终端中运行的Shell脚本中无效[重复]
【发布时间】:2021-09-25 09:35:12
【问题描述】:

我正在编写一个 shell 脚本来下载我公司的 MSP 代理并将其安装在我们的客户将要购买的新 Mac 计算机上。当我在终端中运行以下命令时,它可以完美运行:

curl --output AgentInstall.zip <url>

但是,当我在脚本中放入完全相同的行时,它会在运行时返回以下错误:

curl: (3) URL using bad/illegal format or missing URL

我没有做任何花哨的事情,比如将命令嵌入到变量中。我已经尝试过更多的变体,然后我可以数数,不同的选项,例如 -o、-O、-oO 等,我尝试过使用

$https://&lt;url&gt;

我尝试将 URL 包含在“”中,但我尝试过的任何方法都没有取得任何成功。最让我困惑的是,我上面发布的命令在直接粘贴到终端时有效,而不是脚本。我是 Shell/Bash 脚本的新手,所以我确信这是我缺少的一些新手,但如果有人能指出那是什么,我将不胜感激。谢谢!

编辑以包含最小可重现示例:

我已包含我的脚本,其 URL 已更改为 Firefox 下载链接。我再次确认,粘贴到终端的命令可以正常工作,但是在脚本中运行时会返回上述错误。

#!/bin/sh
#
#download and extract agent
#
mkdir /tmp/AgentInstall
cd /tmp/AgentInstall
curl --output AgentInstall.zip https://www.mozilla.org/en-US/firefox/download/thanks/
unzip AgentInstall.zip
#

【问题讨论】:

  • &lt;url&gt; 不在您的行中,因此它不可能是“完全相同”的行。
  • 也就是说,一种可能是您的脚本有隐藏字符,例如 DOS 行尾。
  • 尝试运行bash -x yourscript;如果使用$'\r' 打印$'http://example.com/whatever\r' 之类的URL,您就知道您的文件有CRLF 换行符,而不是有效的UNIX LF-only 换行符。
  • 除此之外——我们真的需要minimal reproducible example来解决这类问题。
  • 您是否有理由认为 $https://&lt;url&gt; 会起作用,或者您只是将随机的类似 shell 的构造扔到您的脚本中,希望某些东西能神奇地起作用?

标签: bash shell curl


【解决方案1】:

错误是由 CRLF 换行而不是 LF 换行引起的。感谢@Charles Duffy 的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多