/** # Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package lookup import ( "os" "path" "path/filepath" "strings" ) const ( envPath = "PATH" ) var ( defaultPATH = []string{"/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin"} ) // GetPaths returns a list of paths for a specified root. These are constructed from the // PATH environment variable, a default path list, and the supplied root. func GetPaths(root string) []string { dirs := filepath.SplitList(os.Getenv(envPath)) inDirs := make(map[string]bool) for _, d := range dirs { inDirs[d] = true } // directories from the environment have higher precedence for _, d := range defaultPATH { if inDirs[d] { // We don't add paths that are already included continue } dirs = append(dirs, d) } if root != "" && root != "/" { rootDirs := []string{} for _, dir := range dirs { rootDirs = append(rootDirs, path.Join(root, dir)) } // directories with the root prefix have higher precedence dirs = append(rootDirs, dirs...) } return dirs } // GetPath returns a colon-separated path value that can be used to set the PATH // environment variable func GetPath(root string) string { return strings.Join(GetPaths(root), ":") }