2

Perl スクリプトを使用して、ClearCase の複数の VOB で複数のユーザーに対してコマンドを実行しています。テキスト ファイルから読み取った VOB のリストがあります。次に、そのリストをループして、実行しようとしている ClearCase コマンドを実行します。ただし、今回はスクリプトが機能していないようです。コマンドを画面に出力してから、プロンプトにコピーして貼り付けると、正常に動作します。Perl スクリプトからは実行されません。私が見た唯一の違いはfmt文字でしたが、それを削除しても実行されません。最初に fmt を直接行に配置してから、それらを変数に設定してみました。最初のコメント行が失敗したものであることがわかりますが、私が試したことの例としてそこに残しました。最後の 2 つのコメントは、このように動作する別のスクリプトからのものです。

コード:

#! /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);
4

2 に答える 2

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
---

于 2013-04-09T20:04:13.653 に答える