我的主机升级了我的FreeBSD版本,现在我的一个脚本坏了。该脚本只需将数据Feed上传到谷歌的商家服务。
脚本(在升级之前工作):
ftp ftp://myusername:mypassword@uploads.google.com/<<END_SCRIPT
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
exit
END_SCRIPT
现在脚本说“未知主机”。相同的脚本适用于OSX。
我尝试删除“ftp://”。 - 没有效果 如果我手动输入用户名和密码,我可以从命令行登录。
我一直在寻找其他解决方案,并尝试了以下方法:
HOST='uploads.google.com'
USER='myusername'
PASSWD='mypassword'
ftp -dni <<END_SCRIPT
open $HOST
quote USER $USER
quote PASS $PASS
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
END_SCRIPT
和
HOST='uploads.google.com'
USER='myusername'
PASSWD='mypassword'
ftp -dni <<END_SCRIPT
open $HOST
user $USER $PASS
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
END_SCRIPT
我在网上找不到任何东西似乎都在做伎俩。有没有人有任何其他想法?我不想使用.netrc文件,因为它是由cron在不同的用户下执行的。
答案 0 :(得分:1)
ftp(1)
表明有一个简单的-u
命令行开关来上传文件;由于ascii
是默认值( shudder ),您可以用一个命令行替换整个脚本:
ftp -u ftp://username:password@uploads.google.com/mymerchantfile.txt\
/usr/www/users/myname/feeds/mymerchantfile.txt
(用\\n
包裹的长行,随意删除反斜杠并将其全部放在一行上。)
答案 1 :(得分:0)
ftp $HOSTNAME <<EOFEOF
$USER
$PASS
ascii
put $LOCALFILE $REMOTETEMPFILE
rename $REMOTETEMPFILE $REMOTEFINALFILE
EOFEOF
请注意,上述代码可以通过例如在相关变量中使用空格来轻松破解。此外,这种方法几乎无法可靠地检测和处理故障。
如果你还没有,请查看expect工具。你可能会发现它解决了你不知道的问题。
答案 2 :(得分:0)
一些想法:
只是一个想法,因为这是在子shell中执行的,它应该从父级正确继承,env
在脚本中执行时是否显示与shell相比有什么不同?
你使用正确的“shebang”吗?
任何需要身份验证的代理?
你可以ping主机吗?
答案 3 :(得分:0)
在BSD中,您可以创建一个ftp可用于登录的NETRC脚本。您甚至可以使用NETRC
参数在ftp
命令中指定-N
文件。否则,使用默认NETRC
($HOME/.netrc
)。
答案 4 :(得分:0)
您可以检查shell-login和cron-job之间的环境是否存在差异?在您的登录信息中,运行env
,并留意ftp_proxy
和http_proxy
。
接下来,在cron-job中包含一条将转储环境的行,例如: env >/tmp/your.env
。
也许存在一些差异......另外,您是否仔细检查了-n
开关的正确用法?