Bazel 如何";适当地;通过Starlark从usr/bin调用可执行文件?

Bazel 如何";适当地;通过Starlark从usr/bin调用可执行文件?,bazel,Bazel,在我的一条规则中,我想通过unzip-d解压一个文件,以便访问一些标题 目前,我正在使用路径上的任何解压来实现这一点 ctx.actions.run( ... executable = "unzip", ) 或者,我可以使用/usr/bin/unzip来避免依赖我的路径。然而,不清楚惯用的方法应该是什么。根据我对文档的阅读,理想情况下,我会为规则调用的解压设置一些排序Bazel二进制目标。不过,现在还不清楚我将如何定义二进制目标,也许是一个sh_binary正确的解决方

在我的一条规则中,我想通过
unzip-d
解压一个文件,以便访问一些标题

目前,我正在使用路径上的任何解压来实现这一点

ctx.actions.run(
      ...
      executable = "unzip",
)

或者,我可以使用
/usr/bin/unzip
来避免依赖我的路径。然而,不清楚惯用的方法应该是什么。根据我对文档的阅读,理想情况下,我会为规则调用的
解压
设置一些排序Bazel二进制目标。不过,现在还不清楚我将如何定义二进制目标,也许是一个
sh_binary

正确的解决方案是在repo中使用解压实用程序。(在源目录树中或作为外部存储库导入。)

如果没有这一点,我认为最有原则的方法是编写一个存储库规则,使用
repository\u ctx从路径中查找
unzip
(或者仅仅期望存在“/usr/bin/unzip”),并创建一个包含
shu二进制文件的构建文件(),该文件封装了
unzip
工具

在这两种情况下,您都必须向消费规则添加标签属性“\u unzip\u tool”:

"_unzip_tool": attr.label(
                   executable = True,
                   cfg = "host",
                   default = Label("@unzip//:unzip_tool"),
               ),
并像这样使用它:

ctx.actions.run(
    ...,
    executable = ctx.executable._unzip_tool,
)

有什么想法吗?我仍然不清楚是否应该使用绝对路径。