![](/img/trans.png)
[英]How to exit from cygwin/bash environment called from a perl script?
[英]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 EXIT
和testexit() { 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.