我想在我的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
会在每一行的^
末尾看到继续标记(将整个多行块一起发送。^
cmd.exe
这意味着第一个选项看起来是唯一可行的解决方案,其中构建 YAML 使得该FOR
行及其之后的所有内容都合并为一行。
我努力了:
- 每行末尾没有多余字符的单行距。根据本指南,单行距的 YML 行应该展开为一行,但 Appveyor 不会发生这种情况。
- 双倍行距,每行末尾没有多余的字符。这应该使每一行成为一个单独的命令,实际上它们是,因为第一个
FOR
命令失败,error 255
因为它不完整(只有FOR
行存在,而不是循环的其余部分。) - 双倍行距以 . 结尾
^
。Appveyor 一次只运行每一行,所以我error 255
在第一个不完整的FOR
命令上得到一个。 - 单行距以
^
如上所示终止。与双倍行距相同的问题,error 255
来自不完整的FOR
命令。 - 在运行单独的命令(例如,多个语句)时,以 结束每一行
&& ^
确实有效msbuild
,但这不适用于FOR
循环,因为如果没有&&
前面的命令,您将无法使用。
是否有将单个cmd
命令拆分为多行的技巧appveyor.yml
?