Perl: can not get correct exit code from external program

348 views Asked by At

I've searched everywhere, but I can't seem to find a solution for my issue. Probably, it is code related.

I'm trying to catch the exit code from a novell program called DXCMD, to check whether certain "drivers" are running. This is no problem in bash, but I need to write a more complex perl script (easier working with arrays for example).

This is the code:

#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;
}

I've come this far; the rest of the code is written (getting the states). But the $?>>8 code always returns 60. When I copy the command directly into the shell and echo the $?, the return code is always 2 (which means the driver is running fine). In bash, the code also works (but without the >>8, obviously).

I've looked into the error code 60, but I cannot find anything, so I think it is due to my code.

How can I rectify this error? Or how can I track the error? Anyone? :)

1

There are 1 answers

5
ikegami On BEST ANSWER

Wrong value passed to -getstate. You didn't remove the newline. You're missing

chomp(@driverarray);