我在Ubuntu 11.04上使用Perl 5.10.1.我希望Perl执行shell脚本并使用shell脚本退出的相同代码退出.但这对我不起作用......
system($runCmd) or die("Failed to run \"$runCmd\": $!");
Run Code Online (Sandbox Code Playgroud)
我已经确认运行"$ runCmd"本身会返回退出代码255,但不会调用"die"子句.如何使用正确的代码退出或至少针对非成功代码失败?
另一个小要求是我希望$ runCmd的输出打印到屏幕上.
小智 11
如上所述perldoc -f die,die没有给出特定的退出代码(只有非零退出代码).为了得到你想要的东西,你需要这样的东西:
my $exit_code=system($runCmd);
if($exit_code!=0)
{
print "Command $runCmd failed with an exit code of $exit_code.\n";
exit($exit_code >> 8);
}
else
{
print "Command $runCmd successful!\n";
}
Run Code Online (Sandbox Code Playgroud)
如果system返回255,则需要and有条件的.
system成功执行后返回零.此外,die还将修改脚本的退出代码.而是warn返回最后一个退出代码,如下所示:
system($cmd) and do {
warn "Failed to run $cmd. Exit code is $?";
exit $? >> 8;
};
Run Code Online (Sandbox Code Playgroud)
为了捕获程序的输出,请使用反引号(`)运算符:
my $output = `$cmd`;
if ($?) {
warn ...;
exit $? >> 8;
}
Run Code Online (Sandbox Code Playgroud)
反引号操作符仅捕获STDOUT,因此对于要捕获的所有错误消息(通常转到STDERR),修改$cmd并附2>&1加到它.
注意$?全局右移八位.
积分转到@musiKk:关于system()如何正确检索实际退出状态的perl文档.
Run Code Online (Sandbox Code Playgroud)system($runCmd) or die("Failed to run \"$runCmd\": $!");
与大多数Perl函数不同,system成功时返回false,失败时返回true.这完全是我所知道的倒退,但事实就是如此.
你需要"system()和"not"system()或".你可能$?不想要$!,虽然这有时候很棘手.
我有一个小小的厌恶
system(...) && die
Run Code Online (Sandbox Code Playgroud)
因为它搞砸了|| die通常在右边连续垂直双边缘的所有其余部分,我有时会写
system(...) == 0 || die
Run Code Online (Sandbox Code Playgroud)
这样他们就可以再次排队了.
| 归档时间: |
|
| 查看次数: |
47536 次 |
| 最近记录: |