run.{bash,bat,rc}: use ../bin/go instead of the go binary in $PATH

https://golang.org/doc/contribute.html#quick_test currently suggests
running 'make.bash' and 'run.bash' separately, but 'run.bash'
potentially uses a 'go' command resolved from the wrong GOROOT,
which in turn sets the wrong GOROOT for further commands.

Updates #32674
Updates #17896

Change-Id: I4925d478d0fc7351c4f6d40830ab17d4d688348d
Reviewed-on: https://go-review.googlesource.com/c/go/+/223741
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Katie Hockman <katie@golang.org>
diff --git a/src/run.bash b/src/run.bash
index e18540c..706b4b6 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -16,8 +16,13 @@
 
 set -e
 
-eval $(go env)
-export GOROOT   # the api test requires GOROOT to be set.
+if [ ! -f ../bin/go ]; then
+	echo 'run.bash must be run from $GOROOT/src after installing cmd/go' 1>&2
+	exit 1
+fi
+
+eval $(../bin/go env)
+export GOROOT   # The api test requires GOROOT to be set, so set it to match ../bin/go.
 
 # We disallow local import for non-local packages, if $GOROOT happens
 # to be under $GOPATH, then some tests below will fail.  $GOPATH needs
@@ -56,4 +61,4 @@
 	[ "$(ulimit -H -T)" = "unlimited" ] || ulimit -S -T $(ulimit -H -T)
 fi
 
-exec go tool dist test -rebuild "$@"
+exec ../bin/go tool dist test -rebuild "$@"
diff --git a/src/run.bat b/src/run.bat
index 25ee580..46858f8 100644
--- a/src/run.bat
+++ b/src/run.bat
@@ -4,6 +4,11 @@
 
 @echo off
 
+if exist ..\bin\go goto ok
+echo Must run run.bat from Go src directory after installing cmd/go.
+goto fail
+:ok
+
 :: Keep environment variables within this script
 :: unless invoked with --no-local.
 if x%1==x--no-local goto nolocal
@@ -36,13 +41,13 @@
 set GOROOT_FINAL=
 
 :: get CGO_ENABLED
-go env > env.bat
+..\bin\go env > env.bat
 if errorlevel 1 goto fail
 call env.bat
 del env.bat
 echo.
 
-go tool dist test
+..\bin\go tool dist test
 if errorlevel 1 goto fail
 echo.
 
diff --git a/src/run.rc b/src/run.rc
index c346f5c..ab7abfa 100755
--- a/src/run.rc
+++ b/src/run.rc
@@ -5,7 +5,12 @@
 
 rfork e
 
-eval `{go env}
+if(! test -f ../bin/go){
+	echo 'run.rc must be run from $GOROOT/src after installing cmd/go' >[1=2]
+	exit wrongdir
+}
+
+eval `{../bin/go env}
 
 GOPATH = () # we disallow local import for non-local packages, if $GOROOT happens
             # to be under $GOPATH, then some tests below will fail
@@ -13,4 +18,4 @@
 GOFLAGS = ()
 GO111MODULE = ()
 
-exec go tool dist test -rebuild $*
+exec ../bin/go tool dist test -rebuild $*