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);