2015-05-04 8 views
0

Я пытаюсь загрузить несколько файлов из определенных папок с помощью утилиты 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, используя ожидание, если регулярное выражение подсказки не изменится.

Пожалуйста, пролишите немного света на выше, так как я не могу найти решение.

+0

Использование Net :: SFTP :: Foreign вместо этого – salva

ответ

1

Любые причины использования команды Expect и system sftp для этого? Использование модуля Net :: SFTP облегчит и упростит работу.

Смежные вопросы