我想在我的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?