Perl: не удается получить правильный код выхода из внешней программы

Я искал везде, но я не могу найти решение для моей проблемы. Вероятно, это связано с кодом.

Я пытаюсь поймать код выхода из программы novell под названием DXCMD, чтобы проверить, работают ли определенные "драйверы". Это не проблема в 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, Когда я копирую команду прямо в оболочку и отображаю $?код возврата всегда 2 (что означает, что драйвер работает нормально). В bash код тоже работает (но без >>8очевидно).

Я посмотрел в код ошибки 60, но я не могу ничего найти, поэтому я думаю, что это из-за моего кода.

Как я могу исправить эту ошибку? Или как я могу отследить ошибку? Кто-нибудь?:)

1 ответ

Решение

Неправильное значение передано -getstate, Вы не удалили перевод строки. Ты пропускаешь

chomp(@driverarray);
Другие вопросы по тегам