我使用Perl脚本为ClearCase上的多个VOB中的多个用户运行命令。我有一个从文本文件中读取的VOB列表。然后我循环该列表并执行我正在尝试的任何ClearCase命令。但是,这次脚本似乎不起作用。如果我将命令打印到屏幕然后去复制并粘贴它提示它工作正常。它不会从Perl脚本执行。我看到的唯一区别是fmt字符,但即使我删除它不执行。我尝试先将fmt直接放在线上,然后尝试将它们设置为变量。你会看到第一个评论行是失败的,但我把它留在那里作为我尝试的例子。最后两条评论来自我运行的另一个脚本,它确实有效。
代码:
#! /usr/local/bin/perl -w
use strict;
open(VOBS,"vobs.txt") || die "Can't open: !$\n";
my $u = '%u';
my $a ='%Ad';
my $n ='%N/n';
my $user='john';
my $ct = '/usr/atria/bin/cleartool';
while(my $newvobs=<VOBS>){
chomp($newvobs);
my $tag = $newvobs;
print "\n $tag \n";
print " $ct lstype -kind brtype -invob $tag | grep $user ";
`$ct lstype -kind brtype -invob $tag | grep $user`;
# `/usr/atria/bin/cleartool lstype -kind brtype -invob $tag -fmt '%u %Ad %N/\n' `;
# print "\n cleartool rmtag -view $tag \n";
#`/usr/atria/bin/cleartool rmtag -view $tag `;
}
close(VOBS);
答案 0 :(得分:0)
供参考,这是一个使用-fmt
,“Finding the latest baseline for a component”的perl脚本:
ccperl StreamComp.pl mystream@\pvobtag | findstr {component}
streamcomp.pl
”:#!/usr/bin/perl -w
my $cmdout = `cleartool desc -fmt '%[latest_bls]CXp' stream:$ARGV[0]`;
my @baselines = split(/,/,$cmdout);
foreach $baseline (@baselines)
{
$compname=`cleartool desc -fmt '%[component]p' $baseline`;
printf("%-30s \t %s\n", $compname, $baseline);
}
这是一个为ClearCase UCM环境工作的程序,但它可以让您了解工作语句的类型(首先尝试不使用grep
),您可以尝试在您自己的基础ClearCase程序中重现。< / p>
答案 1 :(得分:0)
实际上你的程序运行了,但是没有打印任何东西。
示例:
#!/usr/bin/perl
use strict;
use warnings;
my $cmd = "cat";
`$cmd $0 | grep warning`;
输出:(无)
最容易修复。最后一行
print `$cmd $0 | grep warning`
输出:
use warnings;
print `$cmd $0 | grep warning`;
如果您需要退出代码,请将最后一行替换为
my $exit = system("$cmd $0 | grep warning");
print $exit;
输出:
use warnings;
my $exit = system("$cmd $0 | grep warning");
0
或使用open来处理输出:
open my $fh, "$cmd $0 | grep warning|" or die;
while (<$fh>) { print $_; }
close $fh;
输出:
use warnings;
open my $fh, "$cmd $0 | grep warning|" or die;
但我可以提出像波纹管这样的东西。使用AUTOLOAD,clearcase命令可用作内部perl命令。
#!/usr/bin/perl
use strict;
use warnings;
sub AUTOLOAD {
(my $sub = $::AUTOLOAD) =~ s/.*:://;
print "---\n";
system("time $sub @_");
print "---\n";
}
my $cmd = "cat";
eval "$cmd($0)";
输出:
---
#!/usr/bin/perl
use strict;
use warnings;
sub AUTOLOAD {
(my $sub = $::AUTOLOAD) =~ s/.*:://;
print "---\n";
system("time $sub @_");
print "---\n";
}
cat($0);
0.00user 0.00system 0:00.00elapsed 400%CPU (0avgtext+0avgdata 2112maxresident)k
0inputs+0outputs (0major+174minor)pagefaults 0swaps
---