我试图从以下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的含义,请告诉我。
答案 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
会避免使用昂贵的叉子和管道。