当前位置:  开发笔记 > 编程语言 > 正文

为什么exec-ing gtar会挂起我的Perl程序?

如何解决《为什么exec-inggtar会挂起我的Perl程序?》经验,为你挑选了1个好方法。

使用gtar将额外文件添加到现有存档时,循环会过早终止或挂起.它也会在创建初始tar.gz文件后终止.

但是,如果我从循环中删除了gtar调用并将print语句放在它们的位置,则循环按预期执行.有人知道为什么吗?下面是循环中包含的代码.

if (-e "flex_$yearA"."_"."$monthA.tar.gz")
{ print"accessing Flex tar \n";
 exec "gtar --append --file=flex_$yearA"."_"."$monthA.tar.gz $FILE";
}
else
{ print "creating Flex Tar \n ";
 exec "gtar -cvsf flex_$yearA"."_"."$monthA.tar.gz $FILE"; 
}

Ovid.. 5

你想要"系统",而不是"exec".这是一个更清洁的版本:

my $tarball = "flex_${yearA}_${monthA}.tar.gz";

if ( -e $tarball ) { 
    print"accessing Flex tar \n";

    my $command = "gtar --append --file=$tarball $FILE";
    system($command) == 0
      or die "Could not ($command): $?";
}
else{ 
    print "creating Flex Tar \n ";
    my $command =  "gtar -cvsf $tarball $FILE";
    system($command) == 0
      or die "Could not ($command): $?";
}

但是,我想知道所有这些变量来自哪里.你可能会在这里暴露一个严重的安全漏洞 有关将列表传递给系统(更安全)的更多信息,请阅读"perldoc -f system".



1> Ovid..:

你想要"系统",而不是"exec".这是一个更清洁的版本:

my $tarball = "flex_${yearA}_${monthA}.tar.gz";

if ( -e $tarball ) { 
    print"accessing Flex tar \n";

    my $command = "gtar --append --file=$tarball $FILE";
    system($command) == 0
      or die "Could not ($command): $?";
}
else{ 
    print "creating Flex Tar \n ";
    my $command =  "gtar -cvsf $tarball $FILE";
    system($command) == 0
      or die "Could not ($command): $?";
}

但是,我想知道所有这些变量来自哪里.你可能会在这里暴露一个严重的安全漏洞 有关将列表传递给系统(更安全)的更多信息,请阅读"perldoc -f system".

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有