命令执行失败perl脚本

问题描述:

$ ssh是Net :: SSH :: Expect对象。情况就像,从我的本地机器我需要ssh到测试服务器。从测试服务器我可以ssh到其他服务器在测试并执行命令。所以$ ssh句柄是用于测试服务器的。现在从测试服务器我做ssh到其他机器并执行mkexport。命令执行失败perl脚本

while($no_of_exports) 
{ 
    my $share_name = &get_share_name(); 
    my $path="$fs" . "$share_name"; 

    $cmd="ssh mgmt001st001 mkexport $share_name $path --nfs \"*\\(rw,no_root_squash\\)\""; 
    print "CMD: $cmd"; 
    $out=$ssh->exec("$cmd"); 
    print $out; 
    --$no_of_exports; 
} 

Output : 
    [[email protected] ~]# 
    CMD: ssh mgmt001st001 mkexport kas142818597 /ibm/gpfs0/kas142818597 --nfs "*\(rw,no_root_squash\)" 
97 --nfs "*\(rw,no_rxport kas142818597 /ibm/gpfs0/kas1428185 

命令执行从Perl脚本 失败但是当我运行命令行相同的命令将它传递: 以下就是我直接从测试服务器执行相同的命令。

[[email protected] ~]# ssh mgmt001st001 mkexport kas327134640 /ibm/gpfs0/kas327134640  --nfs "*\(rw,no_root_squash\)" 
    EFSSG0019I The export kas327134640 has been successfully created. 

EFSSG1000I该命令成功完成。

下面是脚本代码:

$cmd='ssh mgmt001st001 mkexport ' . $share_name . ' ' . $path . ' --nfs \'' . '\\*' . '\\(rw,no_root_squash\\)\''; 
print "CMD: $cmd"; 
$out=$ssh->exec("$cmd"); 
print $out; 

这里是输出:

CMD: ssh mgmt001st001 mkexport kas522199075 /ibm/gpfs0/kas522199075 --nfs '\*\(rw,no_root_squash\)' 
75 --nfs '\*\(rw,no_xport kas522199075 /ibm/gpfs0/kas5221990 
> root_squash\)' 
EFSSF1156A An error occurred in NFS configuration. The client syntax cannot be parsed.  See "man exports" for help. Cause: *(rw,no_ 
bash: line 1: root_squash): command not found 

我有变化?对客户端名称做工精细......但什么是有问题*

$cmd='ssh mgmt001st001 mkexport ' . $share_name . ' ' . $path . ' --nfs "' . 'client002' . '\\\\(rw,no_root_squash\\)"'; 
print "CMD: $cmd"; 
$out=$ssh->exec("$cmd"); 
print $out; 

CMD: ssh mgmt001st001 mkexport kas482978105 /ibm/gpfs0/kas482978105 --nfs "client002\\(rw,no_root_squash\)" 
05 --nfs "client002\xport kas482978105 /ibm/gpfs0/kas4829781 
> \(rw,no_root_squash\)" 
EFSSG0019I The export kas482978105 has been successfully created. 
EFSSG1000I The command completed successfully. 
+0

当您没有手动运行脚本时,脚本是如何运行的?它如何失败?任何错误消息/日志条目? – 2012-07-23 16:24:51

+0

看起来像是一个缓冲区问题。脚本的输出显示CMD:ssh mgmt001st001 mkexport kas326656126/ibm/gpfs​​0/kas326656126 --nfs“* \(rw,no_root_squash \)”26 --nfs“* \(rw,no_rxport kas326656126/ibm/gpfs​​0/kas3266561 > oot_squash \)“/ EFSSF1156A NFS配置中发生错误。客户端语法不能被解析。请参阅“男士出口”寻求帮助。原因:*(rw,no_r bash:line 1:oot_squash):command not found – Joe 2012-07-23 16:44:37

+1

什么是'$ ssh'?它是一个Net :: SSH :: Expect对象吗?他们的命令显着不同。在命令行版本中,您正在远程主机上执行'mkexport'。在Perl版本中,你在远程hsot上执行'ssh'。 – ikegami 2012-07-23 18:11:35

假设$ssh是Net :: SSH :: Expect对象,您正在命令行版本的远程主机上执行mkexport,但在Perl版本的远程主机上执行ssh。这反过来导致由于未转义的问题导致的问题。

  • 删除多余的ssh mgmt001st001
  • *的前面加上\\
+0

来自脚本的行: – Joe 2012-07-24 09:57:21

+0

我已经添加了脚本中的行,并在做出更改后输出它,例如在*之前添加\ – Joe 2012-07-24 10:04:52