2013-10-03 6 views
1

Я пытаюсь вызвать скрипт ksh из моего сценария PERL, но не могу этого сделать.системный вызов perl не вызывает скрипт ksh

Вот моя команда

$cmdString = “/path to script/lookupCal.ksh --service 2 -i /auto/dataprod/MSUkeyDates -f /auto/dataprod/HoursOfOpData --timezone America/New_York” 
system($cmdString) 

Все, что я делаю посылаю входной файл Msymbolukeys, чтобы получить выходной файл с их часами работы (которая будет находиться в HoursOfOpData после выполнения сценария КШ), который я прочитал позже в моем PERL-коде.

Когда я запускаю это из командной строки, он работает так, как ожидалось, но вызов из моего сценария PERL, похоже, не вызывает сценарий ksh.

Я пытался добавить некоторые отладочные

if(system($cmdTmpstr) != 0) 
{ 
if ($? == -1) { 
    print "failed to execute: $!\n"; 
} 
elsif ($? & 127) { 
    printf "child died with signal %d, %s coredump\n", 
     ($? & 127), ($? & 128) ? 'with' : 'without'; 
} 
else { 
    printf "child exited with value %d\n", $? >> 8; 
} 
} 

Это выход я получаю из журналов

**child died with signal 11, without coredump** 

Любые советы, чтобы исправить это?

+1

Вы должны, по крайней мере, захватить и проверить статус команды (нулевой/ненулевой) в обычном ходе событий. Когда он запускается из команды 'system()', стандартный ввод команды будет стандартным входом Perl, а стандартный вывод команды будет стандартным выходом Perl. Какие перенаправления ввода/вывода вы используете в Perl-скрипте? Например, ваш скрипт 'lookupCal.ksh' корректно работает при запуске с помощью ввода/dev/null или вывода, отправленного на'/dev/null', например? Сигнал 11 обычно является SIGSEGV, нарушение сегментации; это проблема в скрипте. –

+2

'$ cmdString =" ... ";'? Что такое с фанки-двойным кавычкой в ​​OP? Это 'chr (226)'? Это часть вашего исходного кода? – mob

+0

Это просто кавычки - просто подумайте, что формат изменился, когда я вставил здесь – Anand

ответ

0

Помогает ли это?

my @cmd = (
    "/path to script/lookupCal.ksh", 
    "--service", 2, 
    "-i", "/auto/dataprod/MSUkeyDates", 
    "-f", "/auto/dataprod/HoursOfOpData", 
    "--timezone", "America/New_York" 
); 
system @cmd; 
+0

Я попробовал ваше предложение, но он все еще не работает (точно такая же функциональность) – Anand

+0

Есть ли что-то особенное, что мне нужно учитывать при запуске скрипта ksh из PERL? Я читал, где еще добавить ksh -c, но это не помогло решить проблему – Anand

Смежные вопросы