1

一部のパス名にスペースが含まれているシステムがあります。これらはコア コードの一部であるため、名前を変更することはできません。コマンド ライン コマンドを呼び出すツールでこれを処理するには、二重引用符のセットを追加するだけでした。

しかし、Build Forge アダプターが使用する xml コードでこれを処理する方法が見つかりませんでした。

たとえば、アダプタに次のコマンドを実行させようとする場合:

cleartool describe "foo bar"@@\main\1

コードは次のようになります。

<match pattern="^(.*?)\@\@(.*?)$"> 

<run command="cc_describe" params="$1 $2"/>

<command name="cc_describe">
    <execute>
         pushd cleartool desc $1@@$2;
    </execute>
</command>

$1 = "foo bar" および $2 = "\main\1" と仮定します。

実行時には、最初のパラメーターにスペースが含まれているため、2 番目のパラメーターはもちろん無視されます。

Preparsing Command Set: [pushd cleartool desc $1@@$2], using Params: 'foo bar main\1'.
Command Set Parsed To: [pushd cleartool desc "foo@@bar"] 

呼び出しコマンドに二重引用符を追加して、これを修正しようとしました:

<run command="cc_describe" params="&quot;$1&quot; $2"/>

二重引用符はコマンドになりますが、違いはありません。

Preparsing Command Set: [pushd cleartool desc $1@@$2], using Params: '"foo bar" \main\1'.
Command Set Parsed To: [pushd cleartool desc "foo@@bar"] 

試行された解決策: @@ を呼び出しコマンドに移動し、受信コマンドから削除し、追加のパラメーターを追加します (1 つのスペースを処理できるようにするため):

<run command="cc_describe" params="$1@@$2"/>

<command name="cc_describe">
    <execute>
         pushd cleartool desc $1$2$3;
   </execute> 
</command>

実行結果:

Preparsing Command Set: [pushd cleartool desc $1@@$2$3], using Params: 'foo bar \main\1'.
Command Set Parsed To: [pushd cleartool desc "foobar@@\main\1"] 
4

2 に答える 2

1

通常、パラメータは全体が引用符で囲まれている必要があります。

cleartool describe "foo bar@@\main\1"

次に、スクリプトがファイル名と拡張パス名を考慮する必要がある場合、そのパラメーターをthe @@部分的に 2 つに分割するのがスクリプトの役割です。

perl ベースの「 Build Forge のアダプターとは」(pdf、ヘルプ ページから)を読んだ後、最初の 2 つのパラメーターの代わりにすべてのパラメーターを使用できるかどうかを確認します。
呼び出しは残ります(同様$1$2追加@@します):

<run command="cc_describe" params="$1 @@ $2"/>

ご覧のとおり、cc_describeコマンド ブロックで$1$2、スペースの問題により、ファイル名の一部しか表すことができませんでした。(bash スタイル) または(perlスタイル)
のいずれかを使用して、パラメーター (その数に関係なく) を連結するかどうかを試してみてください。 パラメータを連結したら、スペースを含めたファイルの完全な拡張パス名で終了します。$*join('', @ARGV)

于 2016-10-08T05:25:22.553 に答える