Copyright 2021 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
Package execabs is a drop-in replacement for os/exec that requires PATH lookups to find absolute paths. That is, execabs.Command("cmd") runs the same PATH lookup as exec.Command("cmd"), but if the result is a path which is relative, the Run and Start methods will report an error instead of running the executable.
package execabs

import (
	
	
	
	
	
	
)

var ErrNotFound = exec.ErrNotFound

type (
	Cmd       = exec.Cmd
	Error     = exec.Error
	ExitError = exec.ExitError
)

func (,  string) error {
	return fmt.Errorf("%s resolves to executable relative to current directory (.%c%s)", , filepath.Separator, )
}

func ( string) (string, error) {
	,  := exec.LookPath()
	if  != nil {
		return "", 
	}
	if filepath.Base() ==  && !filepath.IsAbs() {
		return "", relError(, )
	}
	return , nil
}

func ( string,  *exec.Cmd) {
exec.Command was called with a bare binary name and exec.LookPath returned a path which is not absolute. Set cmd.lookPathErr and clear cmd.Path so that it cannot be run.
		 := (*error)(unsafe.Pointer(reflect.ValueOf().Elem().FieldByName("lookPathErr").Addr().Pointer()))
		if * == nil {
			* = relError(, .Path)
		}
		.Path = ""
	}
}

func ( context.Context,  string,  ...string) *exec.Cmd {
	 := exec.CommandContext(, , ...)
	fixCmd(, )
	return 

}

func ( string,  ...string) *exec.Cmd {
	 := exec.Command(, ...)
	fixCmd(, )
	return