【问题标题】:How to execute cleartool command within perl如何在 perl 中执行 cleartool 命令
【发布时间】:2023-03-03 21:45:01
【问题描述】:

对不起,如果它太天真了。我想编写一个简单的 PERL 脚本,它将接受两个参数(此处提交标签)作为 cleartool 命令的输入,并为我提供合适的输出。 我的代码:

#!/usr/bin/perl
$file1 = system('cleartool find . -version "lbtype($ARGV[0])" -print > filename1');
$file2 = system('cleartool find . -version "lbtype($ARGV[1])" -print > filename2');
$file3 = system('diff filename1 filename2 > changeset');
print $ARGV[0];
print $ARGV[1];
print $file3;
close filename1;
close filename2;
close changeset

现在的输出是 3 个空文件:文件名 1、文件名 2 和变更集。 但我需要两个提交标签之间提交的文件。

谁能说明我哪里出错了!!

提前致谢。

【问题讨论】:

    标签: perl clearcase cleartool


    【解决方案1】:

    试试这个:

    $file1 = system("cleartool find . -version 'lbtype($ARGV[0])' -print > filename1");
    

    而不是

    $file1 = system('cleartool find . -version "lbtype($ARGV[0])" -print > filename1');
    

    【讨论】:

    • 非常感谢!它按我的预期工作。但是你能推断出在 system() 调用中使用 ' "" ' 和 " ' ' " 的区别会导致不同吗?
    • 如果您在单引号中使用变量,则不会对这些变量进行插值。 perl 将变量视为字符串文字。如果你使用双引号,perl 会将它们作为变量插入
    【解决方案2】:

    你还有一些 Perl 包来促进cleartool 命令的执行。

    这将允许直接在数组中而不是文件中获取结果(即使您可以在需要时将该数组转储到文件中)

    @res = ClearCase::CtCmd::exec("find . -version 'lbtype($ARGV[0])' -print");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多