4

以下のperlコードを実行します。

$retCode = ClearCase($cmd); 

エラーなしで動作しますが、65280これを実行すると戻ります。

$retCode = ClearCase($logcmd); 

XPとWindows2003サーバーで同じ結果を試しましたが、すべてActiveStatePerlv5.14.2を使用しました。

このコードは2年前にどこかで機能していました。

  $g_HPPC_DEV_DRIVE =  "M";
  $g_HPPC_DEV_VIEW = "bldforge_AOMS_DEV";
  $g_logfile = "logfile.txt";
  
  $cmd = "startview $g_HPPC_DEV_VIEW";
  $logcmd = $cmd . " >> $g_logfile 2>>&1";
  
  $targetDir = $g_HPPC_DEV_DRIVE . ":\\" . $g_HPPC_DEV_VIEW;
  print "\$targetDir = $targetDir\n"; 
  print "Starting view .......\n"; 
  #$retCode = system("cleartool startview bldforge_AOMS_DEV >> logfile.txt");
  #$retCode = `cleartool startview bldforge_AOMS_DEV`;

  $retCode = ClearCase($logcmd);
  #$retCode = ClearCase($cmd);

sub ClearCase
{
  my $retCode = 0;
  my $args = $_[0];

  my $cmd = "cleartool " . $args;
  $retCode = Execute($cmd);

  return $retCode;

}

sub Execute
{
  my $retCode = 0;
  my $cmd = $_[0];

  if ($g_HPPC_BUILD_SIMULATION ne "Y")
  {
     
     print("Execute() Running...:   $cmd\n");     
     $retCode = system($cmd);
     #$retOut = `$cmd`;     
     #$retCode = $?;
     #print("Command execute output: $retOut\n");
  }
  else
  {
     print("Execute() *** SIMULATION:   $cmd\n");     
  }

  print("Execute() retCode = $retCode, $cmd\n");
  
  return $retCode;
}

この65280終了コードの意味は何ですか?

4

2 に答える 2

6

perldoc -f systemに記載されているように、 system「 ...の戻り値は、待機呼び出しによって返されるプログラムの終了ステータスです。実際の終了値を取得するには、右に8シフトします...」ということを忘れないでください。65280を8シフトすると、255になります。

しかし、残念ながら、それもそれほど役に立ちません。私が判断できる限り、考えられる各cleartool終了コードの正確な意味は文書化されていないためです。私が見つけることができる最も近いものは、cleartoolドキュメント内のこのリンクであり、「単一コマンドモードからの終了ステータスは、コマンドが成功したか(ゼロ終了ステータス)、エラーメッセージを生成したか(非ゼロ終了ステータス)によって異なります。

これで完了です。255はゼロ以外の終了ステータスであり、エラー状態を示します。明るい面としては、表示されていないエラーメッセージが生成されている可能性があります。

トラブルシューティングの手法として、すでに印刷しているので、コマンドラインからプログラムが生成したのと同じコマンドで$cmd呼び出します。cleartool同じ結果が得られた場合、その質問cleartoolはPerlの質問ではなく質問になります。そして少し運が良ければ、そのエラー状態は、単なる終了コードではなく、実際に見ることができるエラーメッセージを生成します。

一方、正しい動作が得られた場合は、Perlランタイム環境とコマンドライン環境の違いを調べ始めてください。権限、環境変数、パス、作業ディレクトリなど。

于 2012-08-16T17:18:52.237 に答える
3

cleartoolを使用する場合は、最新のActive Perl実際には5.14.2 )ではなく、ClearCaseにパッケージ化されたperl ccperl現在はratlperl)を使用することをお勧めします。

したがって、デフォルトでperlスクリプトを起動する代わりに、でperl.exe利用可能な最初のスクリプトを取得し、ClearCaseに含まれているperl%PATH%の1つを使用して呼び出してみてください。

  • ratlperl:でC:\Program Files\Rational\Common
  • またはレガシーccperl:でC:\Program Files\Rational\ClearCase\bin

そして、エラーが続くかどうかを確認します。

根本的な原因はPATH問題でした:いくつかperlが利用可能でした:

  • RationalClearCaseのもの
  • ActivePerlのもの

PATH参照するもの(ClearCaseに付属しているもの)のみを確認することperlで、スクリプトを正常に起動できます。

于 2012-08-16T17:53:09.100 に答える