我试图使用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会话中运行以下命令: get /home/APPL/*..pl /tmp/ACC_CCM_APPL,但我不能这样做,因为expect函数的正则表达式是相同的(sftp>)。如果提示符的regex没有改变,如何使用expect在同一个sftp会话中运行一系列命令。
由于我找不到任何解决办法,所以请对上面的内容稍加说明。
发布于 2015-05-05 07:28:50
为此使用Expect和system命令有什么原因吗?使用Net::SFTP模块将使工作更加轻松和干净。
https://stackoverflow.com/questions/30031049
复制相似问题