2015-06-20 53 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将避免昂贵的叉子和管道。