Я пытаюсь загрузить несколько файлов из определенных папок с помощью утилиты sftp, и я делаю это через Expect.pm. Ниже приведен код, который:Выполнение команд 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: прибудете/дома/заявл /*.pl/tmp/ACC_CCM_APPL Но я не могу этого сделать, поскольку регулярное выражение для функции ожидания будет таким же (sftp>). Как запустить ряд команд внутри одного сеанса sftp, используя ожидание, если регулярное выражение подсказки не изменится.
Пожалуйста, пролишите немного света на выше, так как я не могу найти решение.
Использование Net :: SFTP :: Foreign вместо этого – salva