Perl:无法从外部程序获取正确的退出代码

时间:2013-04-17 14:49:54

标签: perl exit novell-idm

我到处搜索,但我似乎找不到解决问题的方法。可能与代码有关。

我正在尝试从名为DXCMD的novell程序中捕获退出代码,以检查某些“驱动程序”是否正在运行。这在bash中没有问题,但是我需要编写一个更复杂的perl脚本(例如,更容易使用数组)。

这是代码:

#Fill the driverarray with the results from ldapsearch (in ldap syntax)
@driverarray =`ldapsearch -x -Z -D "$username" -w "$password" -b "$IDM" -s sub "ObjectClass=DirXML-Driver" dn | grep ^dn:* | sed 's/^....//' | sed 's/cn=//g;s/dc=//g;s/ou=//;s/,/./g'`;

#iterate through drivers and get the exit code:
foreach $driverdn (@driverarray)
{
    my $cmd = `/opt/novell/eDirectory/bin/dxcmd -user $username -password $password -getstate "$driverdn"`;
    my $driverstatus = $?>>8;
}

我走到这一步;其余的代码都是写的(获得状态)。 但$?>>8代码始终返回60。当我将命令直接复制到shell并回显$?时,返回码始终为2(这意味着驱动程序正常运行)。在bash中,代码也可以工作(但显然没有>>8。)

我查看了错误代码60,但我找不到任何内容,所以我认为这是由于我的代码。

如何纠正此错误?或者我该如何跟踪错误?任何人? :)

1 个答案:

答案 0 :(得分:2)

传递给-getstate的错误值。您没有删除换行符。你错过了

chomp(@driverarray);