長いビルド コマンドをファイル内の複数の行に分割したいのappveyor.yml
ですが、アンラップできないため、最初のFOR
コマンドが途切れてエラーが返されるとビルドが失敗します。.yml
Appveyor 内で再構築されるように、ファイル内の行を正しく分割する方法がわかりません。これはどのように行うことができますか?
ここに簡略化されたバージョンがあります:
build_script:
- cmd: >-
@echo off
FOR %%P IN (x86,x64) DO ( ^
FOR %%C IN (Debug,Release) DO ( ^
msbuild ^
/p:Configuration=%%C ^
/p:Platform=%%P ... ^
|| EXIT 1 ^
) ^
)
次のようにAppVeyorに表示したい:
@echo off
FOR %%P IN (x86,x64) DO ( FOR %%C IN (Debug,Release) DO ( msbuild /p:Configuration=%%C /p:Platform=%%P ... || EXIT 1 ) )
余分なスペースは重要ではありません。重要なのは、 で始まる行FOR
が最後の行まで)
同じ行に表示されることです。
理論的には、Appveyor がこれを確認することも許容されることに注意してください。
@echo off
FOR %%P IN (x86,x64) DO ( ^
FOR %%C IN (Debug,Release) DO ( ^
msbuild ^
/p:Configuration=%%C ^
/p:Platform=%%P ... ^
|| EXIT 1 ^
) ^
)
Windowsインタープリターは、各行の末尾にcmd.exe
ある継続マーカー ( )を認識し、それらを 1 つの大きな長いコマンドとして扱います。複数行ブロック全体を一緒に送信します。^
^
cmd.exe
FOR
これは、行とそれ以降のすべてが 1 行に結合されるように YAML が構築されている場合、最初のオプションが唯一の実行可能なソリューションのように見えることを意味します。
私が試してみました:
- 各行の終わりに余分な文字を含まないシングル スペース。このガイドによると、シングル スペースの YML 行は 1 行にアンラップされるはずですが、Appveyor ではこれが行われません。
- 各行の終わりに余分な文字がないダブルスペース行。これは、各行を個別のコマンドにすることを想定しており、実際には、最初のコマンドが不完全であるために
FOR
失敗するためです (行のみが存在し、ループの残りの部分は存在しません)。error 255
FOR
- で終わるダブルスペース行
^
。Appveyor は一度に 1 行ずつしか実行しないためerror 255
、最初の不完全なFOR
コマンドでエラーが発生します。 ^
上記のようにで終わるシングルスペース行。error 255
不完全なFOR
コマンドからのダブルスペース行と同じ問題。&& ^
個別のコマンド (複数のmsbuild
ステートメントなど) を実行する場合、各行を で終了することは実際には機能しますが、これはFOR
ループでは機能しません&&
。
cmd
で単一のコマンドを複数の行に分割するトリックはありappveyor.yml
ますか?