perl 处理ftp 下 命令问题

#!/usr/bin/perl

$mvs = "22.6.57.76" ;
$user = "*******" ;
$pass = "*******" ;

my $cmd = q{
  ftp -n -v $mvs <<EOD_LINE
  quote USER $user
  quote PASS $pass
  cd 'fnsap3i.ap3ii9br.day.FNETBTCH.CNTL'
  lcd /home/fnsap3i/bancs
  mput *
  quit
EOD_LINE


} ;

print `$cmd` ;
print "End\n" ;

运行结果如下:
$ perl ftp.pl
Not connected.
Not connected.
Not connected.
Local directory now /home/fnsap3i/bancs
Not connected.
End


QUOTE:
原帖由 hoohoobjj 于 2008-1-14 15:37 发表
#!/usr/bin/perl

$mvs = "22.6.57.76" ;
$user = "*******" ;
$pass = "*******" ;

my $cmd = q{
  ftp -n -v $mvs  

同样的环境下, 你有试过交互模式能登陆吗?
交互式可以登录,这些事情每天都在手工做,正因如此,才想写个perl程序自动去做这些事情。


QUOTE:
原帖由 hoohoobjj 于 2008-1-16 22:24 发表
交互式可以登录,这些事情每天都在手工做,正因如此,才想写个perl程序自动去做这些事情。

你是在Linux下测试的吗? Linux的ftp加了-v应该远远不止这些输出的.
另外, 你手工做的时候是用-n -v然后quote的方式吗?
建议使用 Net::FTP , 这样一来不用关心FTP在各种平台上的不同命令参数.
是在AIX下测试的。
手工做的步骤如下:
$ ftp 22.6.57.76
Connected to 22.6.57.76.
220-FTPD1 IBM FTP CS V1R7 at DM11, 07:02:05 on 2008-01-18.
220 Connection will close if idle for more than 5 minutes.
Name (22.6.57.76:fnsap3i): fnsap1x
331 Send password please.
Password:
230 FNSAP1X is logged on.  Working directory is "FNSAP1X.".
ftp> cd 'ndevfns.icmvr.FNETBTCH.COB'
250 The working directory "NDEVFNS.ICMVR.FNETBTCH.COB" is a partitioned data set
ftp> lcd /home/fnsap3i/bancs/day/FNETBTCH.COB
Local directory now /home/fnsap3i/bancs/day/FNETBTCH.COB
ftp> mput *

如果用Net::FTP 如何切换本地目录呢? 就是 lcd 那一步?



QUOTE:
原帖由 hoohoobjj 于 2008-1-18 15:06 发表
是在AIX下测试的。
手工做的步骤如下:
$ ftp 22.6.57.76
Connected to 22.6.57.76.
220-FTPD1 IBM FTP CS V1R7 at DM11, 07:02:05 on 2008-01-18.
220 Connection will close if idle for more than 5 mi ...

如果你有Net::FTP的话还是很方便的, 不用考虑平台问题.

命令方式的话, 你试下把
quote USER your_login
quote PASS your_password
换成
user your_login your_password
看看