Source File
lp_unix.go
Belonging Package
os/exec
// Copyright 2010 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.//go:build unixpackage execimport ()// ErrNotFound is the error resulting if a path search failed to find an executable file.var ErrNotFound = errors.New("executable file not found in $PATH")func ( string) error {, := os.Stat()if != nil {return}:= .Mode()if .IsDir() {return syscall.EISDIR}= unix.Eaccess(, unix.X_OK)// ENOSYS means Eaccess is not available or not implemented.// EPERM can be returned by Linux containers employing seccomp.// In both cases, fall back to checking the permission bits.if == nil || ( != syscall.ENOSYS && != syscall.EPERM) {return}if &0111 != 0 {return nil}return fs.ErrPermission}// LookPath searches for an executable named file in the// directories named by the PATH environment variable.// If file contains a slash, it is tried directly and the PATH is not consulted.// Otherwise, on success, the result is an absolute path.//// In older versions of Go, LookPath could return a path relative to the current directory.// As of Go 1.19, LookPath will instead return that path along with an error satisfying// [errors.Is](err, [ErrDot]). See the package documentation for more details.func ( string) (string, error) {// NOTE(rsc): I wish we could use the Plan 9 behavior here// (only bypass the path if file begins with / or ./ or ../)// but that would not match all the Unix shells.if strings.Contains(, "/") {:= findExecutable()if == nil {return , nil}return "", &Error{, }}:= os.Getenv("PATH")for , := range filepath.SplitList() {if == "" {// Unix shell semantics: path element "" means "."= "."}:= filepath.Join(, )if := findExecutable(); == nil {if !filepath.IsAbs() {if execerrdot.Value() != "0" {return , &Error{, ErrDot}}execerrdot.IncNonDefault()}return , nil}}return "", &Error{, ErrNotFound}}// lookExtensions is a no-op on non-Windows platforms, since// they do not restrict executables to specific extensions.func (, string) (string, error) {return , nil}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)