首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Expect.pm运行sftp命令

使用Expect.pm运行sftp命令
EN

Stack Overflow用户
提问于 2015-05-04 13:10:17
回答 1查看 603关注 0票数 0

我试图使用sftp实用程序从特定文件夹下载几个文件,并通过Expect.pm进行下载。以下是这方面的代码:

代码语言:javascript
复制
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会话中运行一系列命令。

由于我找不到任何解决办法,所以请对上面的内容稍加说明。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 07:28:50

为此使用Expect和system命令有什么原因吗?使用Net::SFTP模块将使工作更加轻松和干净。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30031049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档