Windows bash执行curl报Curl(3) URL格式错误或缺失、-O未找到如何解决
报错原因
- 变量赋值语法错误:shell中变量赋值不允许等号两侧存在空格,你写的
file_path =“xxx”会被系统识别为执行名为file_path的命令而非定义变量,导致后续变量取值为空。 - 符号与大小写问题:使用了中文双引号
“”而非英文双引号"",变量无法正常解析;同时shell变量大小写敏感,你定义的变量名为Local_path,后续调用时写的$local_path属于不同变量,取值为空。 - curl参数使用错误:
-O(大写O)参数的作用是将远程文件以原始文件名保存到本地,不需要额外接路径参数,你后续拼接的路径会被curl识别为异常参数;如果需要指定本地保存路径,应使用小写的-o参数。 - URL格式错误:curl需要接收合法的远程资源URL(如ftp://、http://开头的地址)作为操作对象,你直接传入本地磁盘路径
/D:/test/a.txt不符合curl的参数要求,触发格式报错。 - 路径格式错误:指向文件的路径末尾不需要加斜杠,
/D:/test/a.txt/会被识别为目录而非文件。
修复方案
如果是要下载远程文件到本地指定路径,不需要用到-Q参数,修正后的代码如下:
# 变量赋值无空格,使用英文双引号,统一变量大小写,去掉路径末尾多余斜杠 file_path="ftp://你的远程服务地址/test/a.txt" local_path="/D:/test/b.txt" # 小写curl命令,用小写-o指定本地保存路径,变量调用用引号包裹避免空格问题 curl -k "$file_path" -o "$local_path"
如果你的需求是先给远程FTP服务器的文件重命名,再下载到本地,修正后的代码如下:
# 远程旧文件地址 remote_old_url="ftp://你的远程服务地址/test/a.txt" # 远程重命名后的路径(相对FTP根目录) remote_new_path="test/b.txt" # 本地保存路径 local_path="/D:/test/b.txt" # 分两次发送FTP重命名命令,再执行下载 curl -k -Q "-RNFR /test/a.txt" -Q "-RNTO $remote_new_path" "$remote_old_url" -o "$local_path"
内容的提问来源于stack exchange,提问作者Revanth
相关产品推荐
相关产品推荐

