perl system()退出代码36096

use*_*654 1 perl ksh

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

$proc_ret = system("/path/to/shellscript.sh"); 
Run Code Online (Sandbox Code Playgroud)

$ 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
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*ens 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会避免昂贵的叉子和管道.