0

我有以下 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

它给出的错误是:

:连接失败。

我在脚本中提供了所有正确的信息。可能是什么原因?

4

2 回答 2

1

您可能想看看这里: http: //www.stratigery.com/scripting.ftp.html

它提供了一种简单的方法来做你想做的事。

于 2013-03-13T07:57:21.843 回答
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 发行版都会有一个包。

于 2013-03-13T07:31:25.513 回答