这是Perl代码示例。abc.pl
my $a=0; my $b=0; my $c=0;
my $sum = $a+$b+$c; $ex = 0;
if($sum == 0){
print "success"; print " $ex \n";
}else{
$ec=1 ; print "Not success"; print " $ex \n";
}
exit $ex;
这是我的shell脚本
set ecd = `abc.pl`
set status = $?
echo $status
if ( $status == 0 ) then
echo "Here Status is $status"
else
echo "Status is $status"
endif
echo $status
现在我遇到了if else循环的问题,status的值似乎在if循环前后发生了变化,每次它只打印if条件中的msg。示例输出。
请帮助纠正这个错误。我认为状态if反映了prev命令if?请建议我如何使这个if循环正确工作。请建议我如何更好地使用基础知识。非常感谢帮助。提前感谢。这是问题的延续:[https://stackoverflow.com/questions/75523005/如何捕获Perl脚本的退出代码,该脚本是从shell脚本调用的][1]
2条答案
按热度按时间dxpyg8gm1#
不熟悉
csh
,但我相信$status
是csh的一个特殊变量,等价于$?
。因此,第4行
if
语句中的$status
将由第3行echo $status
的退出代码更新,始终等于0。尝试将
$status
变量更改为$rc
或其他任何变量。不过,我还是建议您使用bsh/bash重写shell脚本。
afdcj2ne2#
你说了
代替
始终使用
use strict; use warnings;
。它会捕获此错误。请注意,
die
会导致perl
以非零状态退出,因此您可以使用以下命令:避免使用变量名
$a
和$b
,因为它们是半特殊的。