【问题标题】:How to check if system command is successful or not如何检查系统命令是否成功
【发布时间】:2017-11-17 17:18:24
【问题描述】:

使用下面的代码如何在 svn update 中检查系统命令是否返回成功。

我希望我的脚本在 svn update 失败时失败,我该如何实现?

sub do_compile
{
 system("svn update");

 print "svn update successful\n";

 $ENV{'PATH'} = '/var/apps/buildtools/apache-maven-3.0.5/bin:/var/apps/java/jdk180_112_x64/bin';

$ENV{'JAVA_HOME'} = '/var/apps/java/jdk180_112_x64';

$ENV{'M2_HOME'} = '/var/apps/buildtools/apache-maven-3.0.5';

my $path = $ENV{'PATH'};

print "$path\n";

 system("mvn clean package -DskipTests=true -s /release/vgt/abc/.m2/artifactory_settings.xml");

【问题讨论】:

标签: perl


【解决方案1】:

系统命令如果成功则返回零,如果失败则返回非零状态(带有相应的错误代码)。

if (system("svn update")) {
    die "SVN update failed!";
}
else {
    print "SVN update successful";
}

更多信息请参考以下链接:

https://perldoc.perl.org/functions/system.html

Perl: After a successful system call, "or die" command still ends script

http://www.perlmonks.org/?node_id=343898

【讨论】:

    【解决方案2】:

    跟随 Jens、Sobrique 和 Naveen 的线索。他们都很好。使用简单的 cmd 进行测试……例如“ls”。确保测试阳性(即ls *.txt)和阴性(即ls *.huh)。然后替换真正的 cmd(即svn ... )。

    如果 cmd 表现良好,这应该可以工作。一个 cmd 被认为是表现良好的,当它成功时会返回 0,当它失败时会返回非零(也就是错误代码)。

    如果 cmd 总是返回 0(或者总是返回非零),捕获输出并搜索关键字以确定成功/失败状态。例如,不要信任 <strong>sqlplus</strong> cmd 及其 0 退出代码。如果在输出中看到 ORA-[0-9]+(Oracle 环境),您可以放心地怀疑它在途中遇到了一些问题。

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多