![](/img/trans.png)
[英]Groovy JsonBuilder adds strange character sequences when building Json
[英]genrule cmd causes "Missing Terminating '"' character when building Envoy w/ bazel
我正在尝试使用 Bazel(位于此处: https : //github.com/envoyproxy/envoy )编译一个名为 Envoy 的开源项目。 尝试运行构建脚本时收到此错误消息:
导致此问题的规则代码位于文件 source/common/version/BUILD 中,如下所示:
genrule(
name = "generate_version_number",
srcs = ["//:VERSION"],
outs = ["version_number.h"],
cmd = """echo "#define BUILD_VERSION_NUMBER \\"$$(cat $<)\\"" >$@""",
visibility = ["//visibility:private"],
)
错误“缺少终止 '”' 来自 cmd 参数中的某个地方给 genrule,但我无法弄清楚。 我曾尝试以大约 1,000 种不同的方式移动引号,但仍然出现相同的错误。
看起来错误是说缺少两个终止引号:第 1 行和第 2 行。因此文件可能如下所示:
#define BUILD_VERSION_NUMBER "1.20.0-dev
"
VERSION
文件最后似乎没有换行,所以我猜正在发生的是echo
添加了一个换行符。 尝试将echo
更改为echo -n
。
有点奇怪的是,我可以在 linux 的终端上看到相同的行为(在末尾回显打印换行符),但不能在 bazel 构建中看到:
$ echo -n 1.0.0 > version.txt
$ hexdump -C version.txt
00000000 31 2e 30 2e 30 |1.0.0|
00000005
$ echo "$(cat version.txt)" > txt ; hexdump -C txt
00000000 31 2e 30 2e 30 0a |1.0.0.|
00000006
$ echo -n "$(cat version.txt)" > txt ; hexdump -C txt
00000000 31 2e 30 2e 30 |1.0.0|
00000005
$ cat BUILD
genrule(
name = "generate_version_number",
srcs = ["version.txt"],
outs = ["version_number.h"],
cmd = """echo "#define BUILD_VERSION_NUMBER \\"$$(cat $<)\\"" >$@""",
visibility = ["//visibility:private"],
)
$ bazel build version_number.h
INFO: Analyzed target //:version_number.h (5 packages loaded, 9 targets configured).
INFO: Found 1 target...
Target //:version_number.h up-to-date:
bazel-bin/version_number.h
INFO: Elapsed time: 0.236s, Critical Path: 0.01s
INFO: 2 processes: 1 internal, 1 linux-sandbox.
INFO: Build completed successfully, 2 total actions
$ cat bazel-bin/version_number.h
#define BUILD_VERSION_NUMBER "1.0.0"
所以不知道为什么会手忙脚乱。
我猜你已经将 git 配置为将以VERSION
结尾的\\n
行转换为\\r\\n
。 $()
命令替换删除了预期配置中的\\n
,但您的配置中仍然有一个\\r
剩余。 您可以通过查看VERSION
文件有多少字节来检查,它应该正好是可打印字符数 + 1(现在为1.21.0-dev
为 11)。
尝试使用 WSL 中的 git 克隆存储库,这将默认为\\r
行结尾。 我猜你使用了 WSL 外部的 git 客户端,默认为\\r\\n
Windows 换行符。
相反,你可能有core.eol
设置为crlf
,而不是native
在WSL gitconfig。 这看起来有点不寻常,但如果是这样,只需将此存储库或全局设置native
。
如果您好奇, https://unix.stackexchange.com/a/383411/415337 会提供有关此行为的更多详细信息以及命令替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.