...
Source file src/pkg/os/exec/lp_unix.go
1
2
3
4
5
6
7 package exec
8
9 import (
10 "errors"
11 "os"
12 "path/filepath"
13 "strings"
14 )
15
16
17 var ErrNotFound = errors.New("executable file not found in $PATH")
18
19 func findExecutable(file string) error {
20 d, err := os.Stat(file)
21 if err != nil {
22 return err
23 }
24 if m := d.Mode(); !m.IsDir() && m&0111 != 0 {
25 return nil
26 }
27 return os.ErrPermission
28 }
29
30
31
32
33
34 func LookPath(file string) (string, error) {
35
36
37
38
39 if strings.Contains(file, "/") {
40 err := findExecutable(file)
41 if err == nil {
42 return file, nil
43 }
44 return "", &Error{file, err}
45 }
46 path := os.Getenv("PATH")
47 for _, dir := range filepath.SplitList(path) {
48 if dir == "" {
49
50 dir = "."
51 }
52 path := filepath.Join(dir, file)
53 if err := findExecutable(path); err == nil {
54 return path, nil
55 }
56 }
57 return "", &Error{file, ErrNotFound}
58 }
59
View as plain text