// 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.varErrNotFound = errors.New("executable file not found in $PATH")func findExecutable( string) error { , := os.Stat()if != nil {return } := .Mode()if .IsDir() {returnsyscall.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 {returnnil }returnfs.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.ifstrings.Contains(, "/") { := findExecutable()if == nil {return , nil }return"", &Error{, } } := os.Getenv("PATH")for , := rangefilepath.SplitList() {if == "" {// Unix shell semantics: path element "" means "." = "." } := filepath.Join(, )if := findExecutable(); == nil {if !filepath.IsAbs() {ifexecerrdot.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 lookExtensions(, string) (string, error) {return , nil}
The pages are generated with Goldsv0.7.0-preview. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.