我有以下shell脚本将txt文件从Unix机器复制到同一网络中的Windows机器上:
#!/bin/sh
HOST='localhost'
USER='redacted'
PASSWD='redacted'
FILE='/los_prod/scripts/log.txt'
ftp $HOST <<END_SCRIPT
user $USER
$PASSWD
put $FILE
quit
END_SCRIPT
exit 0
它将错误描述为:
:连接失败。
我在脚本中提供了所有正确的信息。可能是什么原因?
答案 0 :(得分:1)
你可能想看看这里: http://www.stratigery.com/scripting.ftp.html
它提供了一种简单的方法来做你想做的事。
答案 1 :(得分:0)
ftp
不接受来自stdin
的输入,因此您无法像这样提供登录信息。您需要使用expect之类的程序来自动执行普通的ftp
命令行客户端。更好的选择可能是使用另一种语言而不是Bourne shell脚本。像Perl(由@sarathi提到),Ruby或Python之类的东西可以让你编写一个相当小的脚本并使用它们可用的FTP库来更轻松地编写脚本。
以下是expect
脚本的一个版本:
set host "localhost"
set user "redacted"
set pass "redacted"
set file "/los_prod/scripts/log.txt"
spawn ftp $host
expect "Name"
send "$user\n"
expect "Password:"
send "$pass\n"
expect "ftp>"
send "put $file\n"
expect "ftp>"
send "quit\n"
您可能需要在系统上安装expect
;它并不像其他口译员那样广泛使用。任何现代Linux发行版都会有一个包。