这不是Perl的问题,这是一个csh问题。
Linux RHEL 5.5.56上的Perl 5.8.8。
我有一个测试Perl程序,它使用'exit 3;'设置退出状态。 Perl程序是从我称之为'test'的csh脚本运行的。
Perl程序:
#/usr/bin/perl
# July 11, 2014
# Test exit code with csh $status variable
my($i);
$i=3;
print "$0 Exit with error code $i\n";
exit $i;
调用Perl progam的'test'csh脚本:
#/bin/csh
# July 10, 2014,
perl tstatus.pl
echo "Status=$status"
if ($status > 0) then
echo "ERROR in status: $status"
endif
'echo'行ERROR状态:$ status“永远不会执行,即使'echo'状态= $ status'表示状态为3.
如何让我的csh检查并处理$ status的值? $ status是一个系统变量。
我也试过'if($ stats)then'但这也不起作用。 csh脚本中未报告任何错误。
谢谢。
P.S。我没有在csh中做复杂的事情,所以我还没有准备去打击。我已经阅读了“为什么不是csh”文件。谢谢。
答案 0 :(得分:2)
echo
命令成功,将$status
重置为0.因此,if
永远不会看到非零$status
。
因此,解决方案是消除echo
命令或在$status
命令之后立即保存perl
的值。
我最近遇到了a similar issue。
答案 1 :(得分:0)
在csh中执行的每一行都会设置$ status
我通常会遵循任何声明,在其中要使用类似以下内容测试状态:
设置myrc = $ status
,无论调用和结果评估之间执行的语句数量如何,它都会持续存在。
例如:
perl tstatus.pl
set myrc = $status
echo "Status=$myrc"
if ($myrc> 0) then
echo "ERROR in status: $myrc"
endif