perl 系统 () 退出代码 36096
perl system() exit code 36096
我试图从以下对 ksh 脚本的 system() 调用中找出退出代码 36096 的含义。
$proc_ret = system("/path/to/shellscript.sh");
$proc_ret returns "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的意思,请告诉我。
请注意,36096 是 141 * 256。正如 system
文档告诉您的那样,141 是程序的退出状态。再次注意,shell 的退出状态 >128 通常意味着子进程因信号而被终止。该信号是通过从退出状态中减去 128 获得的(即查看低 7 位)。
因此脚本得到信号 13,即 SIGPIPE
- 在没有 reader 的管道上写入。
看起来 mail
程序似乎无法启动(明白 PATH
对吗?通常 cron 作业有一个非常小的 PATH
,您需要在您的类似 PATH=$(getconf PATH)
.)
的脚本
然后 cat
连接到一个不存在的 reader,瞧,这就是你的信号。
顺便说一句,cat
是无用的,因为 mail -s subj recipient < /path/to/mail.txt
可以避免昂贵的叉子和管道。
我试图从以下对 ksh 脚本的 system() 调用中找出退出代码 36096 的含义。
$proc_ret = system("/path/to/shellscript.sh");
$proc_ret returns "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的意思,请告诉我。
请注意,36096 是 141 * 256。正如 system
文档告诉您的那样,141 是程序的退出状态。再次注意,shell 的退出状态 >128 通常意味着子进程因信号而被终止。该信号是通过从退出状态中减去 128 获得的(即查看低 7 位)。
因此脚本得到信号 13,即 SIGPIPE
- 在没有 reader 的管道上写入。
看起来 mail
程序似乎无法启动(明白 PATH
对吗?通常 cron 作业有一个非常小的 PATH
,您需要在您的类似 PATH=$(getconf PATH)
.)
然后 cat
连接到一个不存在的 reader,瞧,这就是你的信号。
顺便说一句,cat
是无用的,因为 mail -s subj recipient < /path/to/mail.txt
可以避免昂贵的叉子和管道。