太复杂的FTP bash脚本的密码?

我已经阅读了几个与这个问题有关的问题,但是他们没有一个似乎对我的问题有一个有效的答案。 我只需要编写一个简单的bash脚本来通过FTP连接来获得一对文件。

正常的脚本是这样的

#!/bin/bash username="myFTPusername" password="myFTPpass" ftp -in hostname <<EOF quote USER $username quote PASS $password lcd mylocaldirectory cd FTPfolder get filename bye EOF 

我也试过这个命令,在这里看到

 wget -O filename ftp://user:pass@hostname/filename 

但是他们都没有工作。 足够Weid,没有脚本,我可以访问没有问题,我的用户和密码工作正常。 但是,当我尝试通过脚本或wget命令连接时,我得到一个“login不正确”。

密码格式有什么限制吗? 它有不同的字符, 其中一个是“$” 。 我唯一的猜测是,美元符号是脚本中的问题。 任何想法来解决它? 如果我不能改变FTP传递怎么办?

使用wget(或curl)可能是你最好的select。 如果你的密码包含shell元字符(比如'$'),你需要在命令行中引用它。 例如:

 wget -O filename 'ftp://user:pass@hostname/filename' 

使用单引号禁止在引用string内部扩展'$'。

不要在脚本中存储身份validation信息,请尝试将它们放在〜/ .netrc中 ,这样可以避免在shell中扩展密码中的$字符的问题。