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