如何从 bazel 中的文件中导出环境变量
How to export environment variables from files in bazel
bazel --action_env
可以一一指定变量
如果有.env
文件,如何导出?
如果你运行它在类似 U*X 的系统上,对于你的文件格式每行一对 var=val
,你可以 运行 这样的东西(注意这有点天真,如果任何变量值中有空白字符,就会中断):
bazel build $(while read l; do echo "--action_env $l"; done < .env) //target
它确实为命令行上的每一行输入添加了 --action_env line_of_input_from_your_file
。
或者(这个更健壮一点,不应该关心空格,但它也需要 xargs
才能工作):
while read l; do echo -ne "--action_env[=11=]$l[=11=]"; done < .env \
| xargs -x0 bazel build //target
这会读取每一行输入并打印 --action_env
并且该行本身都以空字符结尾。 xargs
然后将 运行 bazel build //target
后跟上一步中的每个空分隔项 (-0
) 作为附加参数。如果结果行太长(超过允许的限制),-x
是为了确保我们失败而不是将输入拆分为多个 bazel
调用。
但是不,bazel 没有专用的命令行选项来读取您描述的格式(或任何格式)的文件并使用它来定义其操作的环境。一般来说,这种操纵似乎会产生非常广泛的影响,而且不太可能完全合理。 IE。如果你真的需要这样做并且你确定这是继续的方式,你需要使用另一个工具,例如 shell,准备命令行 运行 bazel
或填充 bazel
命令到 运行.
的环境
bazel --action_env
可以一一指定变量
如果有.env
文件,如何导出?
如果你运行它在类似 U*X 的系统上,对于你的文件格式每行一对 var=val
,你可以 运行 这样的东西(注意这有点天真,如果任何变量值中有空白字符,就会中断):
bazel build $(while read l; do echo "--action_env $l"; done < .env) //target
它确实为命令行上的每一行输入添加了 --action_env line_of_input_from_your_file
。
或者(这个更健壮一点,不应该关心空格,但它也需要 xargs
才能工作):
while read l; do echo -ne "--action_env[=11=]$l[=11=]"; done < .env \
| xargs -x0 bazel build //target
这会读取每一行输入并打印 --action_env
并且该行本身都以空字符结尾。 xargs
然后将 运行 bazel build //target
后跟上一步中的每个空分隔项 (-0
) 作为附加参数。如果结果行太长(超过允许的限制),-x
是为了确保我们失败而不是将输入拆分为多个 bazel
调用。
但是不,bazel 没有专用的命令行选项来读取您描述的格式(或任何格式)的文件并使用它来定义其操作的环境。一般来说,这种操纵似乎会产生非常广泛的影响,而且不太可能完全合理。 IE。如果你真的需要这样做并且你确定这是继续的方式,你需要使用另一个工具,例如 shell,准备命令行 运行 bazel
或填充 bazel
命令到 运行.