【发布时间】:2016-02-21 00:53:43
【问题描述】:
请注意:由于 StackOverflow 的限制,我需要在 URL 中插入一些空格。
我有一个 FreeBSD 服务器。我需要在 WebDav 云存储上备份我以前的 tar.gz 数据库,如 Yandex Disk 或 Box.com 或 4Shared。
Putty 一切正常,命令行接一个命令行。我可以在 Yandex Disk 上上传我的文件:
%cadaver
dav:!> open https://webdav.yandex.com
Authentication required for Yandex.Disk on server `webdav.yandex.com':
Username: MyUserName
Password:
dav:/> put MyFile.tar.gz
Uploading MyFile.tar.gz to `/MyFile.tar.gz':
Progress: [=============================>] 100.0% of 1229518 bytes succeeded.
dav:/> exit
Connection to ` webdav . yandex . com' closed.
%
但是,我的 bash 脚本无法上传我的文件。
这是我的 bash 脚本“criptdav.sh”:
#!/bin/sh
/usr/local/bin/cadaver < datadav
这是我的“datadav”文件:
open https:// webdav . yandex . com
MyUserName
MyPassword
put MyFile.tar.gz
exit
这是我的 bash 脚本的 Putty 屏幕截图:
%sh scriptdav.sh
dav:!> open https://webdav.yandex.com
Authentication required for Yandex.Disk on server `webdav.yandex.com':
Username: MyUserName
dav:/>
Connection to `webdav.yandex.com' closed.
%
Nota Bene:
我尝试使用 Yandex、Box、4Shared。结果相同。脚本无法上传我的文件。
问题:
我的 bash 脚本有什么问题?
【问题讨论】:
-
感谢 S K 编辑了我的消息,但是我的“Putty 截图”现在已经坏了,所以现在没人能看懂。
-
一个挑剔:以
#!/bin/sh开头的脚本,或者打算以sh yourscript而不是bash yourscript运行的脚本不是bash 脚本,而是POSIX sh 脚本。它们是两种不同的语言。 -
无论如何 -- 没有专门研究过尸体,但一般来说,编写良好的软件(从安全最佳实践的角度来看)不会接受来自标准输入的密码,而是从 TTY 读取密码.
-
...如果您想要一个 WebDAV 客户端在编写脚本时表现良好,我会考虑
curl(是的,它可以用于此目的)或lftp(是的,尽管名称中有“FTP”,但它支持WebDAV)。