我正在尝试使用sftp实用程序从特定文件夹下载少量文件,并通过Expect.pm进行。以下是代码:
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会话中运行以下命令: 获取/home/appl/*.pl / tmp / ACC_CCM_APPL 但我不能这样做,因为期望函数的正则表达式是相同的(sftp&gt;)。如果提示的正则表达式没有改变,我如何使用expect在同一个sftp会话中运行一系列命令。
请注意以上内容,因为我找不到任何解决方案。
答案 0 :(得分:1)
使用Expect和system sftp命令的原因是什么?使用Net :: SFTP模块可以使工作更轻松,更干净。