我有以下脚本(只是摘录,其他部分不相关):
@output = $con->cmd("show module | grep ignore-case \"Supervisor Module\" | cut -d \" \" -f 1");
for (@output[1 .. $#output]) {
print "******* Supervisor Slot $_ *******\n";
@suboutput = $con->cmd("slot $_ quoted 'show system internal raid'");
print "@suboutput";
print "\n";
}
我一直遇到一个问题,脚本会到达@suboutput行,然后看起来转到脚本中的其他行而不允许@suboutput行完成。这导致@suboutput数组在我打印时被缩短。
有没有办法让脚本在继续执行脚本的其余部分之前等待命令完成?我正在考虑使用睡眠命令,虽然我不确定是否有更具体/万无一失的方法让脚本等待。
我的另一个想法是让脚本等到子输出数组包含一个确切的行“somehostname#”(#之后没有其他文本,只是somehostname#)。只要@suboutput行命令执行完毕,就会出现这一行,见下面看看我在说什么:
somehostname# slot 5 quoted "show system internal raid"
RAID data from CMOS = 0x61 0xb7
RAID data from driver disks 0 bad 0 name
Current RAID status info:
Bootflash: /dev/sdb
Mirrorflash: /bin/cat: /var/log/boot_node_mirror: No such file or directory
Personalities : [raid1]
unused devices: <none>
Personalities : [raid1]
unused devices: <none>
/bin/cat: /var/log/raid_monitor.log: No such file or directory
/bin/cat: /var/log/raid_repair.log: No such file or directory
Current RAID status:
Bootup RAID status:
RAID Monitor log:
RAID repair log:
---------------------------------------------------
somehostname#
我再次不确定是否有更好的方法来实现这一目标。
答案 0 :(得分:0)
我们最终通过添加新驱动程序(非perl相关)和更新的perl模块来解决此问题。
我们联系了HP(执行此perl脚本的服务器软件的发布者),他们确定了服务器&amp;脚本在执行slot x quoted ....命令时感到困惑,并且过早地切断了输出。 HP提供的更新文件通过允许HPNA和perl脚本正确确定命令何时实际执行完毕来解决问题。