0
我想从使用sftp实用程序的特定文件夹下载几个文件,并通过Expect.pm来完成它。下面是该代码:使用Expect.pm运行sftp命令
use strict;
use Expect;
my $userid = `whoami`;
chomp($userid);
my $Password = "<password>";
my $command = "sftp " . "$userid" . "\@<server-name>";
my $spawn_ok = 0;
my $timeout = 10;
print "$command \n";
my $exp = new Expect();
$exp->log_file("FTPLOGFILE.txt");
$exp->spawn("$command") or die "Cannot spawn $command: $!\n";
$exp->log_stdout(0);
$exp->expect($timeout,
[ 'Password:',
sub {
$spawn_ok = 1;
my $fh = shift;
print "Sending password \n";
$fh->send("$Password\r");
exp_continue;
}
],
[ 'sftp> ',
sub {
my $fh = shift;
$spawn_ok = 3;
print "Downloading cfg files \n";
$fh->send("get /home/cfg/*.cfg /tmp/ACC_CCM_CFG","\n");
$fh->send("bye","\n");
exp_continue;
}
]
的问题是除了从网上下载文件到上面的目录:/ tmp目录/ ACC_CCM_CFG我也想运行相同的SFTP会话中下面的命令: GET /家/申请/*.pl/tmp/ACC_CCM_APPL 但是我不能这样做,因为expect函数的正则表达式是相同的(sftp>)。如果提示的正则表达式没有改变,我如何在预期的同一个sftp会话中运行一系列命令。
请在上面提一下,因为我找不到任何解决方案。
使用Net :: SFTP :: Foreign – salva