Always use /bin/sh to run the command.
SHELL environment variable cannot be relied on because the rbcrun
can be run as `env - rbcrun ...`
Fixes: 184278019
Test: build/soong/soong_ui.bash --make-mode USE_BAZEL=1 TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=userdebug droid dist platform_tests
Change-Id: Id8fc7fd1ae8f2e674028ba5ffb3616f87eea6bc4
diff --git a/tools/rbcrun/host.go b/tools/rbcrun/host.go
index f1697f1..1e43334 100644
--- a/tools/rbcrun/host.go
+++ b/tools/rbcrun/host.go
@@ -182,7 +182,7 @@
}
if shellPath == "" {
return starlark.None,
- fmt.Errorf("cannot run shell, SHELL environment variable is not set (running on Windows?)")
+ fmt.Errorf("cannot run shell, /bin/sh is missing (running on Windows?)")
}
cmd := exec.Command(shellPath, "-c", command)
// We ignore command's status
@@ -234,8 +234,12 @@
"rblf_wildcard": starlark.NewBuiltin("rblf_wildcard", wildcard),
}
- // NOTE(asmundak): OS-specific.
- shellPath, _ = os.LookupEnv("SHELL")
+ // NOTE(asmundak): OS-specific. Behave similar to Linux `system` call,
+ // which always uses /bin/sh to run the command
+ shellPath = "/bin/sh"
+ if _, err := os.Stat(shellPath); err != nil {
+ shellPath = ""
+ }
}
// Parses, resolves, and executes a Starlark file.