2014-06-17 73 views
1

我正在使用PERL的NET::OpenSSH模塊。我在簡單的腳本上試過了,它的工作完美。openSSH - 無法調用方法捕獲

現在我包括它在一個更大的腳本:

switch ($ARGV[2]) { 

case "OBS" { 

    my $ssh = Net::OpenSSH->new("$user:$passwdobs\@$ARGV[1]"); 
    if ($ssh->error) { 
     print ERR_REPORT_SSH "Echec ssh sur " . $ARGV[1] . " erreur a gerer plus tard\n"; 
     die "Echec du ssh sur " . $ARGV[1] . "\n"; 
    } 
} 

我有2人的情況與此類似,只有「案例‘OBS’,」正在發生變化,它的密碼。 變量$ ssh從來沒有未初始化。

而且在腳本中,我寫了這個:

open(SSHCONFIG, "/tech/gtr/scripts/osm/environnement_qualif/scan-rh2/bin/ssh.conf"); 
while (<SSHCONFIG>) { 
    @ligne = split(/;/, $_); 
    $listop = $ligne[0]; 
    $listcmd = $ligne[1]; 
    $fileprefix = $ligne[2]; 

    if ($listop =~ /$operateur/) { 
     print "l'operateur match\n" . "commande : " . $listcmd . "\n"; 
     #sendCommand($listcmd, $fileprefix); 
     my $out1 = $ssh->capture($listcmd); 
     print $out1 ; 
    } 
    else { 
     next; 
    } 
} 

雖然有一些在「ssh.conf」文件,腳本應該執行該文件中給出的命令。 但是,啓動時,腳本與此錯誤停止:

l'operateur match 
commande : show arp 
Can't call method "capture" on an undefined value at sshscript.pl line 65, <SSHCONFIG> line 1. 

我的$ listcmd變量是不是空的,因爲你可以看到。 爲什麼不能調用捕獲方法? 謝謝。

回答

1

變量$sshcase "OBS"塊的末尾超出範圍。

那種錯誤的,可以很容易地抓住你的腳本的開頭使狹窄:

use strict; 
use warnings; 

BTW,不要使用Switch,它被打破,通過設計和可能引入很難找到的bug在你的腳本上。

相關問題