Unix系统的返回状态(echo ..)怀疑

时间:2014-05-21 18:12:07

标签: perl

我们有一个运行Perl脚本的作业,它准备3个文件(Header,content,Footer),然后将它们合并到一个文件中。

使用系统命令准备头文件

$ret = system("/usr/bin/echo '$hdr' > $HDR_FILE");
if ( $ret != 0 )
{
   print STDERR "**ERROR** error preparing header\n";
}

合并文件命令如下

  $ret = system("/usr/bin/cat $HDR_FILE $CONTENT_FILE $TRLR_FIL > $OUTPUT_FILE");
    if ( $ret != 0 )
    print STDERR "**ERROR** merge failed\n";

在最近一次执行作业期间,我们没有看到任何标题错误的痕迹,但是当内容和预告片存在时,最终输出文件$OUTPUT_FILE仍然没有标题。 可以

$ret = system("/usr/bin/echo '$hdr' > $HDR_FILE");

返回' 0'即使头文件为空,状态也是如此?

1 个答案:

答案 0 :(得分:0)

我会通过更好的错误处理来简化您的代码:

选项1:使用反引号

$ret = `/usr/bin/echo '$hdr' > $HDR_FILE 2>&1`;
if ( $? || $ret )
{
   print STDERR "**ERROR** error preparing header, error: $ret\n";
}

选项2:使用print而不是echo

open(my $fh,'>',$HDR_FILE) or die "Cannot write to $HDR_FILE";
print $fh $hdr;
close($fh);