如何读取由另一个脚本创建的脚本的输入

时间:2013-09-12 16:48:50

标签: input perl-module

我需要在每个文件中进行更改。我将使用的命令是: perl -pi -e's / v8 / v9 / g'#replace v8 with v9 for each files

我获得了一个工具,该工具已经创建了需要更改的文件列表。我的脚本需要进行更改然后返回到原始脚本,该脚本将重新运行校验和并将新校验和插入数据库。

update_xml.pl -d'dataType'-''myscript'

我似乎无法获取'update_xml.pl -d'创建的文件列表成为myscript的输入。 另外,我如何结束脚本以确保初始脚本(update_xml.pl)完成?

我不是程序员,所以非常感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

听起来您正在尝试使用重定向/管道来处理流量控制。这将无法执行您希望它执行的操作,因为子脚本无法将其完成传回给父级,从而允许父级继续执行更新过程的下一步。我建议您修改update_xml.pl以执行以下步骤:

  1. 找到必要的文件。
  2. 更新它们。
  3. 计算文件校验和。
  4. 根据需要更新数据库。
  5. 因此,如果我正确理解您的问题,您应该将第2步注入现有的update_xml.pl脚本中。您可以使用以下代码完成此操作,假设每个文件的完整路径位于“@files”数组中的元素中:

    for my $file(@files) {
      my $cmd = "/path/to/perl -pi -e 's/v8/v9/g' $file";
      system($cmd);
    }
    

    如果要使用单独的脚本并在命令行中指定它,请使用Getopt::Long

    use Getopt::Long;
    my $modify_script;
    GetOptions('-s=s' => \$modify_script);
    ...
    if(-x $modify_script) {
      for my $file(@files) {
        my $cmd = "$modify_script $file";
        system($cmd)
      }
    }