繁体   English   中英

从从Perl脚本内部调用的Shell脚本返回退出代码

[英]Returning an exit code from a shell script that was called from inside a perl script

我有一个perl脚本( verifyCopy.pl ),该脚本使用system()调用Shell脚本( intercp.sh )。

在shell脚本中,我已经设置了几个具有特定退出代码的退出,并且我希望能够根据返回的退出代码执行不同的操作。

我尝试使用$? ,我尝试将system("./intercp.sh")的值分配给变量,然后检查该值,但错误消息始终为0。

这是因为即使Shell脚本中的某些内容失败了,实际的脚本还是可以成功运行吗?

我尝试在shell脚本中添加陷阱(即trap testexit EXITtestexit() { exit 222; }但是那也不起作用。

$? 应该从您的shell脚本中捕获退出代码。

$ cat /tmp/test.sh 
#!/bin/sh
exit 2

$ perl -E 'system("/tmp/test.sh"); say $?'
512

还记得$? 是用传统方式编码的,所以$? >> 8 $? >> 8给出退出代码, $? & 0x7F $? & 0x7F给出信号,以及$? & 0x80 如果转储核心,则$? & 0x80为true。 有关详细信息,请参见perlvar。

您的问题可能是以下几件事之一:也许您的shell脚本实际上并未随退出代码一起退出(也许您需要set -e ); 也许您有SIGCHLD的信号句柄吃了退出代码; 等等。尝试使用上面非常简单的shell脚本进行测试,以查看在您的perl脚本或shell脚本中是否存在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM