2013-10-03 94 views
1

我想從我的PERL腳本調用ksh腳本,但無法這樣做。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的KSH腳本運行後)的輸出文件,我讀稍後在我的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腳本上使用什麼I/O重定向?例如,在'/ dev/null'輸入或者輸出發送到'/ dev/null'時,'lookupCal.ksh'腳本的行爲是否正確?信號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

從PERL運行ksh腳本時需要考慮什麼特別的東西嗎?我讀了一些其他地方添加ksh -c,但也沒有解決問題 – Anand