如何使用Perl的OpenSSH读取输出的每一行

时间:2016-03-09 15:15:34

标签: perl ssh openssh

使用Perl的Net::SSH::Except,有一个名为read_line的方法,它允许我读取输出的每一行。

我想使用Net::OpenSSH但我找不到类似的东西。

如何使用SSH::Except编写此OpenSSH方法?

$ssh->send("ls\r\n");

while ( defined( $line = $ssh->read_line() ) {
    # do something
}

1 个答案:

答案 0 :(得分:4)

Net :: OpenSSH模块提供捕获方法,捕获所有输出。如果在列表上下文中调用将逐行返回输出

use strict;
use warnings;
use Net::OpenSSH;

my $host = "localhost";
my %opts = (
        user => 'cdoyle',
        password => 'thisisnottherealpassword',
);
my $ssh = Net::OpenSSH->new($host, %opts);
my @output = $ssh->capture('ls -lrta');

my $count=0;
foreach my $line (@output){
        $count++;
        print "line $count $line";
}

给出输出

line 1 total 28
line 2 -rw-------  1 cdoyle users   73 Jun 11  2015 .Xauthority
line 3 -rw-------  1 cdoyle users  602 Jun 11  2015 .viminfo
line 4 -rw-r--r--  1 cdoyle users   32 Jun 11  2015 .profile
line 5 drwxr-xr-x  2 cdoyle users 4096 Jun 11  2015 .
line 6 -rw-------  1 cdoyle users  682 Aug 20  2015 .sh_history
line 7 drwxr-xr-x 32 root   root  4096 Feb 21 02:33 ..