0

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

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

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

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

我不是程序员,因此将不胜感激所有帮助。

4

1 回答 1

0

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

  1. 找到必要的文件。
  2. 更新它们。
  3. 计算文件校验和。
  4. 根据需要更新数据库。

因此,如果我正确理解您的问题,您应该将第 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)
  }
}
于 2013-10-12T05:21:14.963 回答