perl system()退出代码36096

时间:2015-06-20 13:36:47

标签: perl ksh

我试图从以下system()调用ksh脚本中找到退出代码36096的含义。

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

$ proc_ret返回" 36096"

我检查了shellscript.sh的输出,它运行正常,直到调用了shellscript.sh中的另一个shell脚本(status.sh)。 只调用该脚本的第一行,不调用脚本的其余部分。

这是status.sh

的内容
echo "a" > /tmp/a
echo "complete."
echo "b" >> /tmp/a
cat /path/to/mail.txt | mail -s "subject" email@domain
echo "mail complete."
echo "c" >> /tmp/a

我不知道为什么脚本在第一行之后没有继续。对shellscript.sh进行系统调用的退出代码对我来说很奇怪。 如果有人知道36096的含义,请告诉我。

1 个答案:

答案 0 :(得分: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会避免使用昂贵的叉子和管道。