【问题标题】:Require exit status !=0 for the main script if script within the system command/backtick fails如果系统命令/反引号中的脚本失败,则主脚本需要退出状态!=0
【发布时间】:2021-10-07 10:46:34
【问题描述】:

inter.pl的代码是:

use strict;
use warnings;

my $var1=`cat /gra/def/ment/ckfile.txt`;  #ckfile.txt doesn't exist
print "Hello World";
exit 0;

当我执行 inter.pl ( perl inter.pl) 并检查退出状态时,我看到它为 0。我知道它显示为 0 的原因,因为它是一个在孩子中执行它的反引号xterm 然后在执行后返回。因此,在子 xterm 中会看到不等于 0 的退出状态。

但是,我想要的是,当脚本中的任何地方出现任何问题时,无论是在系统命令或反引号内执行的脚本中还是在主脚本中,它应该退出那里,然后退出状态不等于0.

就像这里一样,因为 ckfile.txt 不存在,所以 `cat /gra/def/ment/ckfile.txt` 会给出一些错误。现在,由于它是脚本中的错误命令,脚本应该以 status != 0 退出。(目前,它以 status == 0 退出。)

如何实现?

【问题讨论】:

    标签: perl system backticks


    【解决方案1】:

    您可以创建一个变量来存储外部命令的状态,然后将其传递给exit$? error variable 保存backticks command 的状态。

    use strict;
    use warnings;
    
    my $stat = 0;
    my $var1=`cat /gra/def/ment/ckfile.txt`;  #ckfile.txt doesn't exist
    $stat = 1 if $?;
    print "Hello World\n";
    exit $stat;
    

    您在代码开头将$stat 变量设置为0。如果您的代码有多个命令要运行,则在每个命令后检查退出状态,如果它不为零,则只需将 $stat 设置为 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-08
      • 2016-12-30
      • 2013-03-01
      • 2021-10-23
      • 2017-10-12
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多