![curl 显示大于号而不是将给定文件上传到给定服务器](https://linux22.com/image/1501232/curl%20%E6%98%BE%E7%A4%BA%E5%A4%A7%E4%BA%8E%E5%8F%B7%E8%80%8C%E4%B8%8D%E6%98%AF%E5%B0%86%E7%BB%99%E5%AE%9A%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0%E7%BB%99%E5%AE%9A%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我想在 Linux 命令行中将文件上传到 WebDAV 服务器。对此的标准建议是按以下方式使用 curl:
curl -u mail_address:password -T filename.ext https://my_server.com/dav/filename.ext
当我执行此命令时,它会在命令提示符中显示一个大于号,好像我的命令不完整,没有发生上传:
$ curl -u mail_address:password -T filename.ext https://my_server.com/dav/filename.ext
$ >
但是,它并没有告诉我在这里要输入什么,也没有告诉我在互联网上要发布什么(例如有没有办法通过命令行上传到 box.com 存储?) 是否曾提到您必须在此命令后输入一些其他内容。有什么想法可以解决此问题?邮件地址和密码引用现有帐户,并且文件名.扩展名指的是我的机器上现有的文件。
附言
- Ubuntu 14.04
- curl 7.35.0(x86_64-pc-linux-gnu)libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
答案1
我敢打赌你的密码里有一个引号('
或"
)。Bash 认为你已经开始了一个多行字符串/引号,所以它会给你$PS2
迅速的在第二行,通常是>
。
确保你的论点都是正确逃脱。
例如:
如果您的密码是$jkl;'"
,那么您可以使用双引号将其转义,如"\$jkl;'\""
。
或者,您可以像这样运行命令:
curl -u mail_address -T filename.ext https://dav.box.com/dav/filename.ext
然后,curl
将提示您输入密码,如下所示:
deltik@node51 [~]$ curl -u mail_address -T filename.ext https://dav.box.com/dav/filename.ext
Enter host password for user 'mail_address':
文档:
-u
,--user <user:password>
指定用于服务器身份验证的用户名和密码。覆盖
-n
、--netrc
和--netrc-optional
。如果您仅指定用户名,curl 将提示输入密码。
用户名和密码在第一个冒号处分开,因此使用此选项时无法在用户名中使用冒号。但密码仍然可以。
在基于 Windows 的服务器上使用 Kerberos V5 时,您应该在用户名中包含 Windows 域名,以便服务器成功获取 Kerberos 票证。如果不这样做,初始身份验证握手可能会失败。
当使用 NTLM 时,如果您的设置中只有一个域和林,则可以简单地将用户名指定为用户名,而无需域。
要指定域名,请使用下级登录名或 UPN(用户主体名称)格式。例如,EXAMPLE\user 和 [电子邮件保护]分别。
如果您使用启用了 Windows SSPI 的 curl 二进制文件并执行 Kerberos V5、Negotiate、NTLM 或 Digest 身份验证,那么您可以通过使用此选项指定单个冒号来告诉 curl 从您的环境中选择用户名和密码:“-u:”。
如果多次使用此选项,则将使用最后一个选项。