diff --git a/src/os/exec/exec.go b/src/os/exec/exec.go index 8101e718ff..f0dc7dab7d 100644 --- a/src/os/exec/exec.go +++ b/src/os/exec/exec.go @@ -465,6 +465,9 @@ func lookExtensions(path, dir string) (string, error) { // The Wait method will return the exit code and release associated resources // once the command exits. func (c *Cmd) Start() error { + if c.Path == "" && c.Err == nil && c.lookPathErr == nil { + c.Err = errors.New("exec: no command") + } if c.Err != nil || c.lookPathErr != nil { c.closeDescriptors(c.closeAfterStart) c.closeDescriptors(c.closeAfterWait) diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go index c593cbd11d..9cc14bdaca 100644 --- a/src/os/exec/exec_test.go +++ b/src/os/exec/exec_test.go @@ -1125,3 +1125,11 @@ func TestStringPathNotResolved(t *testing.T) { t.Errorf("String(%q, %q) = %q, want %q", "makemeasandwich", "-lettuce", got, want) } } + +func TestNoPath(t *testing.T) { + err := new(exec.Cmd).Start() + want := "exec: no command" + if err == nil || err.Error() != want { + t.Errorf("new(Cmd).Start() = %v, want %q", err, want) + } +}