Perl - 从通道输出错误代码

时间:2013-07-23 16:29:46

标签: perl ssh channel

我正在创建一个perl脚本,在TeamCity中使用net :: SSH2创建一个通道。 我能够执行我的命令,但是我无法让通道正确记录并返回错误代码,导致TeamCity失败,如果出现问题。

我尝试了很多不同的变体,但这是我目前的代码。

$chan = $ssh2->channel();
$chan->blocking(0);
$chan->shell();
$exitCode = 1;
print $chan "/usr/bin/dos2unix /nfsMount/tomcat/cronScripts/*.sh\n";
while (<$chan>)
{
    print "dos2unix utility successful.\n";
    $exitCode = 0;
}

我真的不明白这个频道是如何运作的。根据我阅读here的内容,您执行代码后似乎需要某种绑定的文件句柄。我的代码执行,但永远不会进入阻止。我也尝试了类似的变体:

$chan->exec('/usr/bin/dos2unix /nfsMount/tomcat/cronScripts/*.sh');
print "dos2unix successful" while <$chan>;

无济于事。

1 个答案:

答案 0 :(得分:-1)

对于只执行单个命令检查返回状态,Net::SSH2::Simple看起来很简单。我建议改为尝试:

use Net::SSH2::Simple;

my $ssh2 = Net::SSH2::Simple->new();
{
    my ($stdout,$stderr, $exitcode) = $ssh2->cmd( "uname -sr" ) or die "cannot execute uname: $self->error";
    if ($exitcode == 0) {
            print $stdout if $stdout;
            print $stderr if $stderr;
    }
    else {
            print $stderr if $stderr;
            die "uname failed with exit code $exitcode";
    }
}