Двоичные файлы, начинающиеся с bazel run
, выполняются во внутреннем каталоге Bazel.Они будут иметь доступ к «runfiles», которые являются файлами, упомянутыми в атрибуте data
двоичного правила или его зависимостей.Например, если у вас есть правило, подобное приведенному ниже, вы сможете читать foo.txt
, но не bar.txt
или другие файлы:
load("@io_bazel_rules_go//go:def.bzl", "go_binary")
go_binary(
name = "hello",
srcs = ["hello.go"],
data = ["foo.txt"],
)
Обратите внимание, что рабочий каталог двоичного файласоответствует корневому каталогу хранилища, а не каталогу, в котором определен двоичный файл.Вы можете отлаживать с помощью os.Getwd
и filepath.Walk
.
Вы упомянули, что хотите получить доступ к файлу yaml, переданному в командной строке.Предположительно, вы хотите иметь доступ к любому файлу, который передает пользователь, а не только к файлам, упомянутым в атрибуте data
.Для этого случая взгляните на переменную окружения BUILD_WORKING_DIRECTORY
(bazel run
устанавливает это).Это дает путь к каталогу, в который был вызван bazel run
.Кроме того, BUILD_WORKSPACE_DIRECTORY
- это путь к корневому каталогу рабочей области.