Skip to content

Commit

Permalink
cmd/go: place GOROOT/bin at the beginning of PATH in 'go run'
Browse files Browse the repository at this point in the history
This causes programs that use 'go' as a subprocess to use the same go
command as the parent 'go run' command.

Fixes #68005

Change-Id: I937cef474bf038a925bb74fc73e5f377b03e27b7
GitHub-Last-Rev: 9986537
GitHub-Pull-Request: #68040
Reviewed-on: https://go-review.googlesource.com/c/go/+/593255
LUCI-TryBot-Result: Go LUCI <[email protected]>
Reviewed-by: Michael Knyszek <[email protected]>
Reviewed-by: Michael Matloob <[email protected]>
  • Loading branch information
mauri870 authored and matloob committed Oct 9, 2024
1 parent 18131ec commit 935bf13
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/cmd/go/internal/base/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"os"
"os/exec"
"reflect"
"slices"
"strings"
"sync"

Expand Down Expand Up @@ -211,7 +212,9 @@ func RunStdin(cmdline []string) {
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = cfg.OrigEnv
env := slices.Clip(cfg.OrigEnv)
env = AppendPATH(env)
cmd.Env = env
StartSigHandlers()
if err := cmd.Run(); err != nil {
Errorf("%v", err)
Expand Down
42 changes: 42 additions & 0 deletions src/cmd/go/testdata/script/run_goroot_PATH.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# https://go.dev/issue/68005: 'go run' should run the program with its own GOROOT/bin
# at the beginning of $PATH.

[short] skip

[!GOOS:plan9] env PATH=
[GOOS:plan9] env path=
go run .

[!GOOS:plan9] env PATH=$WORK${/}bin
[GOOS:plan9] env path=$WORK${/}bin
go run .

-- go.mod --
module example

go 1.19
-- main.go --
package main

import (
"fmt"
"os"
"os/exec"
"path/filepath"
)

func main() {
got, err := exec.LookPath("go")
if err != nil {
fmt.Println(err)
os.Exit(1)
}

want := filepath.Join(os.Getenv("GOROOT"), "bin", "go" + os.Getenv("GOEXE"))
if got != want {
fmt.Printf(`exec.LookPath("go") = %q; want %q\n`, got, want)
os.Exit(1)
}
}
-- $WORK/bin/README.txt --
This directory contains no executables.

0 comments on commit 935bf13

Please sign in to comment.