Perl系统返回代码65280并成功

时间:2015-12-16 10:23:22

标签: linux perl ssh system

我正在运行一个Perl脚本,我使用命令system执行SSH连接。

看起来像这样:

$test_result = '/home/ergaconfigs/sauvegarde-configs/configs/test';

sub ssh_connect {
        my $test = system (`ssh -i /home/ergaconfigs/sauvegarde-configs/rsa_keys/key_config_saver -o "StrictHostKeyChecking no" ergaconfigs\@10.252.0.27 "show configuration | display set" > $test_result `);

        print "resultat de la commande : $test \n le code d erreur est $!";
}

但我想确保SSH连接成功。这就是为什么我要查看system的返回码 当 SSH连接成功并且文件正确写入时,输出为:

resultat de la commande : 65280
le code d erreur est 

无论ssh连接的结果是什么(网络无法访问等等),我都有相同的输出。有人能解释我为什么吗?

2 个答案:

答案 0 :(得分:2)

我不知道您在命令中使用systembackticks的原因。

请参阅此内容以了解systembacktickshttps://stackoverflow.com/a/800105/4248931

如果您想要商店输出命令,请使用backticks,如果您不关心输出使用system

从代码中删除system并检查输出:

$test_result = '/home/ergaconfigs/sauvegarde-configs/configs/test';

sub ssh_connect
{
    my $test = `ssh -i /home/ergaconfigs/sauvegarde-configs/rsa_keys/key_config_saver -o "StrictHostKeyChecking no" ergaconfigs\@10.252.0.27 "show configuration | display set" > $test_result`;
    print "resultat de la commande : $test \n le code d erreur est $!";
}

答案 1 :(得分:1)

正如所写的那样,代码中的反引号实际上是运行ssh命令,然后从那里输出的(可能是空的)stdout是什么被传递到system命令。

我希望这不是你想要的。如果是这样,请用正常的双引号替换反引号。然后,您需要更改命令中的任何双引号 - 单引号应该这样做。