2015-06-20 94 views
1

我試圖從以下system()調用ksh腳本中找到退出代碼36096的含義。perl system退出代碼36096

$proc_ret = system("/path/to/shellscript.sh"); 

$ proc_ret返回 「36096」

我已經檢查shellscript.sh的輸出,它運行良好,直到另一個shell腳本(status.sh)內shellscript.sh被調用。 只有該腳本的第一行被調用,腳本的其餘部分沒有被調用。

這裏是status.sh

echo "a" > /tmp/a 
echo "complete." 
echo "b" >> /tmp/a 
cat /path/to/mail.txt | mail -s "subject" [email protected] 
echo "mail complete." 
echo "c" >> /tmp/a 

的內容,我不知道爲什麼在腳本的第一行後,並沒有繼續。對於shellscript.sh系統調用的退出代碼對我來說看起來很奇怪。 如果有人知道36096的含義,那麼請讓我知道。

+1

'print $ ?;'read' perldoc -f system' – toolic

回答

5

請注意,36096是141 * 256.正如system文檔告訴你的,141是該程序的退出狀態。再次注意,shell中的退出狀態> 128通常意味着子進程因信號而死亡。該信號是通過從退出狀態中減去128獲得的(即查看低7位)。

所以腳本得到了信號13,即SIGPIPE - 寫在沒有閱讀器的管道上。

它看起來好像mail程序無法啓動(得到了PATH吧?通常cron作業有一個很小的PATH,你需要把它與類似PATH=$(getconf PATH)你的腳本。)

然後cat管道到一個不存在的讀者,瞧,這是你的信號。

順便說一句,這是無用的使用cat,因爲mail -s subj recipient < /path/to/mail.txt將避免昂貴的叉子和管道。